0

我在 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;
}

Mat 的对象大小相同。

4

1 回答 1

1

要使用 Cany Edge Detector,我们需要像 Miki 所说的那样制作灰度图像。现在我使用函数cvtColorCOLOR_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;
}
于 2015-09-15T09:28:56.713 回答