簡體   English   中英

如何在OpenCv中將cv :: Mat轉換為灰度?

[英]How can I convert a cv::Mat to a gray scale in OpenCv?

如何將cv :: Mat轉換為灰度?

我試圖從opencv運行drawKeyPoints func,但是我收到了Assertion Filed錯誤。 我的猜測是它需要在參數中接收灰度圖像而不是彩色圖像。

void SurfDetector(cv::Mat img){
vector<cv::KeyPoint> keypoints;
cv::Mat featureImage;

cv::drawKeypoints(img, keypoints, featureImage, cv::Scalar(255,255,255) ,cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

cv::namedWindow("Picture");
cv::imshow("Picture", featureImage);

}

使用C ++ API,函數名略有變化,現在寫入:

#include <opencv2/imgproc/imgproc.hpp>

cv::Mat greyMat, colorMat;
cv::cvtColor(colorMat, greyMat, CV_BGR2GRAY);

主要的困難是函數在imgproc模塊中(不在核心中),並且默認情況下cv :: Mat是藍綠紅(BGR)順序而不是更常見的RGB。

OpenCV 3

從OpenCV 3.0開始,還有另一個約定。 轉換代碼嵌入在命名空間cv:: ,並以COLOR為前綴。 那么,這個例子就變成了:

#include <opencv2/imgproc/imgproc.hpp>

cv::Mat greyMat, colorMat;
cv::cvtColor(colorMat, greyMat, cv::COLOR_BGR2GRAY);

據我所見,包含的文件路徑沒有改變(這不是一個錯字)。

對后來者可能有所幫助。

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
  if (argc != 2) {
    cout << "Usage: display_Image ImageToLoadandDisplay" << endl;
    return -1;
}else{
    Mat image;
    Mat grayImage;

    image = imread(argv[1], IMREAD_COLOR);
    if (!image.data) {
        cout << "Could not open the image file" << endl;
        return -1;
    }
    else {
        int height = image.rows;
        int width = image.cols;

        cvtColor(image, grayImage, CV_BGR2GRAY);


        namedWindow("Display window", WINDOW_AUTOSIZE);
        imshow("Display window", image);

        namedWindow("Gray Image", WINDOW_AUTOSIZE);
        imshow("Gray Image", grayImage);
        cvWaitKey(0);
        image.release();
        grayImage.release();
        return 0;
    }

  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM