我怎样才能简历::垫转换为灰度?
我试图从OpenCV的运行drawKeyPoints FUNC,但是我已经越来越断言提起错误。 我的猜测是,它需要接收灰度图像,而不是在参数的彩色图像。
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 ::垫是在蓝绿红(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;
}
}
}