2012-04-27 37 views
25

¿Cómo puedo convertir un cv :: Mat en una escala de grises?¿Cómo puedo convertir un cv :: Mat en una escala de grises en OpenCv?

Estoy tratando de ejecutar drawKeyPoints func desde opencv, sin embargo he estado obteniendo un error de Assertion Filed. Supongo que necesita recibir una imagen de escala de grises en lugar de una imagen de color en el parámetro.

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

}

Respuesta

50

Uso de la API C++, el nombre de la función ha cambiado ligeramente y se escribe ahora:

#include <opencv2/imgproc/imgproc.hpp> 

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

Las principales dificultades son que la función está en el módulo imgproc (no en el núcleo), y por defecto cv :: Mat están en el orden Azul Verde Rojo (BGR) en lugar del RGB más común.

OpenCV 3

A partir de OpenCV 3.0, no es otra convención. Los códigos de conversión están incrustados en el espacio de nombres cv:: y llevan el prefijo COLOR. Por lo tanto, se convierte en el ejemplo a continuación:

#include <opencv2/imgproc/imgproc.hpp> 

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

Por lo que he visto, la ruta del archivo incluido no ha cambiado (esto no es un error tipográfico).

+1

En OpenCV 3, la constante del tipo de conversión se ha cambiado a COLOR_BGR2GRAY –

+0

Gracias, actualizaré la respuesta. OpenCV 3 se lanzará pronto, será útil. – sansuiso

Cuestiones relacionadas