如何在OpenCv中将cv :: Mat转换为灰度?

use*_*603 39 c++ variables opencv grayscale

如何将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);
Run Code Online (Sandbox Code Playgroud)

}

san*_*iso 70

使用C++ API,函数名略有变化,现在写入:

#include <opencv2/imgproc/imgproc.hpp>

cv::Mat greyMat, colorMat;
cv::cvtColor(colorMat, greyMat, CV_BGR2GRAY);
Run Code Online (Sandbox Code Playgroud)

主要的困难是函数在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);
Run Code Online (Sandbox Code Playgroud)

据我所见,包含的文件路径没有改变(这不是一个错字).

  • 在OpenCV 3下,转换类型常量已更改为COLOR_BGR2GRAY (2认同)
  • 好吧,我想我找到了```cv::cvtColor(img, greyMat, cv::COLOR_BGR2GRAY); cv::cvtColor(greyMat, greyMat, cv::COLOR_GRAY2BGR);``` (2认同)