2012-04-27 20 views
25

Bir cv :: Mat'i gri skala nasıl dönüştürebilirim?OpenCv'de cv :: Mat'i gri skalaya nasıl dönüştürebilirim?

Opencv'den drawKeyPoints func çalıştırmaya çalışıyorum, ancak bir Assertion Filed hatası alıyorum. Tahminimce, parametrede renkli bir görüntü yerine gri tonlamalı bir görüntü alması gerekiyor.

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

}

cevap

50

C++ API kullanarak, işlev adı hafifçe değişti ve şimdi yazıyor:

#include <opencv2/imgproc/imgproc.hpp> 

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

ana zorluklar (işlev imgproc modülünde olduğunu vardır çekirdekte değil) ve varsayılan olarak cv :: Mat, daha yaygın RGB yerine Mavi Yeşil Kırmızı (BGR) düzenindedir.

OpenCV 3

OpenCV 3.0 ile başlayarak, daha başka bir kural yoktur. Dönüşüm kodları cv:: ad alanına yerleştirilmiştir ve COLOR ile öneklenmiştir. Yani, örnek şuna dönüşür:

#include <opencv2/imgproc/imgproc.hpp> 

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

Bildiğim kadarıyla gördüğümüz gibi, dahil dosya yolu değişmedi (bu bir yazım hatası değildir).

+1

OpenCV 3 altında, dönüşüm türü sabiti COLOR_BGR2GRAY –

+0

olarak değiştirildi. Teşekkürler, cevabı güncelleyeceğim. OpenCV 3 yakında yayılıyor, yararlı olacak. – sansuiso