2012-04-27 6 views
25

cv :: Matをグレースケールに変換するにはどうすればよいですか?OpenCvでcv :: Matをグレースケールに変換するにはどうしたらいいですか?

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

}

答えて

50

C++ APIを使用して、関数名は少し変更されました、それが今書いている:

#include <opencv2/imgproc/imgproc.hpp> 

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

主な困難は(関数がimgprocモジュールであること、コアではない)、デフォルトではcv :: Matは一般的なRGBの代わりにBlue Green Red(BGR)の順番になっています。

のOpenCV OpenCVの3.0から3

、さらに別の慣例があります。 変換コードはネームスペースcv::に埋め込まれ、接頭辞はCOLORです。 だから、例は、次のようになります。

#include <opencv2/imgproc/imgproc.hpp> 

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

は限り私が見てきたように、含まれるファイルのパスが変更されていない(これはタイプミスではありません)。

+1

OpenCV 3では、変換タイプ定数がCOLOR_BGR2GRAYに変更されました –

+0

ありがとうございます、私は答えを更新します。 OpenCV 3はすぐに公開されています。役立つでしょう。 – sansuiso

関連する問題