Нарушение доступа к месту чтения Функция OpenCV Canny

У меня проблема с моим проектом в OpeCV. Я хочу получить изображение, которое является результатом вычитания двух изображений, а затем получить помеченные края с помощью Canny Edge Detector, но только то, что я получаю, является исключением.

Вот экран печати с исключением:

введите описание изображения здесь

Это мой код:

#pragma once
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
Mat pierwszy = imread("one.jpg", IMREAD_COLOR);
Mat drugi = imread("two.jpg", IMREAD_COLOR);
Mat wynik;
subtract(pierwszy, drugi , wynik);
imwrite("../../images/wynik.jpg", wynik);
Canny(wynik, wynik, 33, 100);
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", wynik);
waitKey(0);
return 0;
}

Объекты мата имеют одинаковый размер.

0

Решение

Чтобы использовать Cany Edge Detector, нам нужно сделать изображение в оттенках серого, как сказала Мики. Теперь я использую функцию cvtColor с COLOR_BGR2GRAY и мой код выглядит так:

#pragma once
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
Mat pierwszy = imread("one.jpg", IMREAD_COLOR);
Mat drugi = imread("two.jpg", IMREAD_COLOR);
Mat wynik;
subtract(pierwszy, drugi , wynik);
imwrite("../../images/wynik.jpg", wynik);
Mat wynik_gray;
cvtColor(wynik, wynik_gray, COLOR_BGR2GRAY);
Canny(wynik_gray, wynik_gray, 33, 100);
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", wynik_gray);
waitKey(0);
return 0;
}
1

Другие решения