Вопрос по variables, c++, opencv, grayscale – Как я могу преобразовать cv :: Mat в оттенки серого в OpenCv?

32

Как я могу преобразовать cv :: Mat в оттенки серого?

Я пытаюсь запустить функцию drawKeyPoints из opencv, однако получаю сообщение об ошибке подтверждения. Я предполагаю, что он должен получить изображение в градациях серого, а не цветное изображение в параметре.

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

}

Ваш Ответ

2   ответа
1

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

  }

}
60

имя функции немного изменилось, и теперь оно пишет:

#include <opencv2/imgproc/imgproc.hpp>

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

Основные трудности заключаются в том, что функция находится вimgproc модуль (не в ядре), и по умолчанию cv :: Mat расположены в порядке «синий зеленый красный» (BGR) вместо более распространенного RGB.

OpenCV 3

Начиная с OpenCV 3.0, существует еще одно соглашение. Коды преобразования встроены в пространство именcv:: и имеют префиксCOLOR. So, the example becomes then:

#include <opencv2/imgproc/imgproc.hpp>

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

Насколько я видел, путь к включенному файлу не изменился (это не опечатка).

Спасибо, я обновлю ответ. OpenCV 3 скоро выйдет, это будет полезно.
В OpenCV 3 константа типа преобразования была изменена на COLOR_BGR2GRAY

Похожие вопросы