Comment convertir un cv:: Mat en échelle grise dans OpenCv?
comment convertir un cv:: Mat en échelle grise?
j'essaie d'exécuter drawKeyPoints func à partir d'opencv, cependant j'ai eu une erreur D'Assertion déposée. À mon avis, il doit recevoir une image à l'échelle de gris plutôt qu'une image en couleur dans le paramètre.
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);
}
2 réponses
en utilisant L'API C++, le nom de la fonction a légèrement changé et elle écrit maintenant:
#include <opencv2/imgproc/imgproc.hpp>
cv::Mat greyMat, colorMat;
cv::cvtColor(colorMat, greyMat, CV_BGR2GRAY);
Les principales difficultés que la fonction est dans le imgproc module (pas dans le noyau), et par défaut cv:: Mat sont dans L'ordre Bleu Vert Rouge (BGR) au lieu du plus commun RGB.
OpenCV 3
à partir de OpenCV 3.0, il y a encore une autre convention.
Les codes de Conversion sont inclus dans l'espace de noms cv::
et sont avec le préfixe COLOR
.
Ainsi, l'exemple devient alors:
#include <opencv2/imgproc/imgproc.hpp>
cv::Mat greyMat, colorMat;
cv::cvtColor(colorMat, greyMat, cv::COLOR_BGR2GRAY);
d'après ce que j'ai vu, le chemin du fichier inclus n'a pas changé (ce n'est pas une faute de frappe).
Peut être utile pour les retardataires.
#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;
}
}
}