gray cvtcolor convert color_rgb2gray cielab c++ variables opencv grayscale

c++ - cvtcolor - opencv rgb



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

Puede ser útil para los que llegan tarde.

#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; } } }

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

Estoy tratando de ejecutar drawKeyPoints func desde opencv, sin embargo he estado recibiendo 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);

}


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

#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

Comenzando con OpenCV 3.0, hay otra convención. Los códigos de conversión están incrustados en el espacio de nombres cv:: y tienen el prefijo COLOR . Entonces, el ejemplo se convierte entonces:

#include <opencv2/imgproc/imgproc.hpp> cv::Mat greyMat, colorMat; cv::cvtColor(colorMat, greyMat, cv::COLOR_BGR2GRAY);

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