2012-04-27 137 views
25

如何將cv :: Mat轉換爲灰度?如何將cv :: Mat轉換爲OpenCv中的灰度級?

我想從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); 

}

回答

50

使用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); 

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

+1

在OpenCV 3下,轉換類型常量已更改爲COLOR_BGR2GRAY – 2015-01-26 19:12:45

+0

謝謝,我會更新答案。 OpenCV 3即將推出,它會很有用。 – sansuiso 2015-01-27 07:50:05