2012-04-27 16 views
25

Come posso convertire un cv :: Mat in una scala di grigi?Come posso convertire un cv :: Mat in una scala di grigi in OpenCv?

Sto tentando di eseguire funcKeyPoints da opencv, tuttavia ho ricevuto un errore di Assertion Filed. La mia ipotesi è che ha bisogno di ricevere un'immagine in scala di grigi piuttosto che un'immagine a colori nel parametro.

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

}

risposta

50

Utilizzando l'API C++, il nome della funzione è leggermente cambiato e scrive ora:

#include <opencv2/imgproc/imgproc.hpp> 

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

Le principali difficoltà che la funzione è nel modulo ImgProc (non nel core), e per impostazione predefinita cv :: Mat sono nell'ordine Blue Green Red (BGR) invece del più comune RGB.

OpenCV 3

A partire da OpenCV 3.0, c'è ancora un altro convegno. I codici di conversione sono incorporati nello spazio dei nomi cv:: e hanno il prefisso COLOR. Così, l'esempio diventa allora:

#include <opencv2/imgproc/imgproc.hpp> 

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

Per quanto ho visto, il percorso del file incluso non è cambiato (questo non è un errore di battitura).

+1

In OpenCV 3, la costante del tipo di conversione è stata modificata in COLOR_BGR2GRAY –

+0

Grazie, aggiornerò la risposta. OpenCV 3 uscirà presto, sarà utile. – sansuiso

Problemi correlati