2012-04-27 78 views
25

Làm cách nào để chuyển đổi cv :: Mat thành thang màu xám?Làm cách nào để chuyển đổi cv :: Mat thành thang màu xám trong OpenCv?

Tôi đang cố chạy lệnh drawKeyPoints func từ opencv, tuy nhiên tôi đã nhận được lỗi Xác nhận đã gửi. Tôi đoán là nó cần phải nhận được một hình ảnh quy mô màu xám chứ không phải là một hình ảnh màu sắc trong tham số.

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

}

Trả lời

50

Sử dụng C++ API, tên hàm đã hơi thay đổi và nó viết bây giờ:

#include <opencv2/imgproc/imgproc.hpp> 

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

Những khó khăn chính là rằng chức năng là trong imgproc mô-đun (không phải trong lõi), và theo mặc định cv :: Mat nằm trong lệnh Blue Green Red (BGR) thay vì RGB phổ biến hơn.

OpenCV 3

Bắt đầu với OpenCV 3.0, có được nêu ra là ước khác. Mã chuyển đổi được nhúng trong không gian tên cv:: và được bắt đầu bằng COLOR. Vì vậy, ví dụ trở nên thì:

#include <opencv2/imgproc/imgproc.hpp> 

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

Theo như tôi đã thấy, các đường dẫn tập tin bao gồm vẫn không thay đổi (điều này không phải là một lỗi đánh máy).

+1

Dưới OpenCV 3, hằng số loại chuyển đổi đã được đổi thành COLOR_BGR2GRAY –

+0

Cảm ơn, tôi sẽ cập nhật câu trả lời. OpenCV 3 sắp ra mắt, nó sẽ hữu ích. – sansuiso

Các vấn đề liên quan