2012-04-27 136 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