gpt4 book ai didi

c - OpenCV 精明;输出图像是纯灰色的

转载 作者:行者123 更新时间:2023-11-30 15:07:11 25 4
gpt4 key购买 nike

我正在学习 opencv 并阅读一本书并遵循示例。书中介绍了canny过滤器。但是我的输出有一些问题。作为输入图像,我给出了 512x512 灰度图像,但滤波器输出是纯灰度图像。这是图片:

这是输入图像。

This is the input image.

这是输出图像。

enter image description here

这是片段:

#include <opencv\cv.h>
#include <opencv2\highgui\highgui.hpp>
#include "Resources.h"

IplImage* doCanny(
IplImage* in,
double lowThresh,
double highThresh,
double aperture
) {
if (in->nChannels != 1)
{
return 0; // Canny only handle gray scale images.
}

IplImage* out = cvCreateImage(
CvSize(cvGetSize(in)),
IPL_DEPTH_8U,
1
);

cvCanny(in, out, lowThresh, highThresh, aperture);
return out;
}

int main(int argc, char** argv)
{
IplImage* image = cvLoadImage(IMAGE_FRUIT);

IplImage* output = doCanny(image, 200, 201, 1);

cvNamedWindow("Canny", CV_WINDOW_AUTOSIZE);

cvShowImage("Canny", output);
cvWaitKey(0);

cvReleaseImage(&output);
cvDestroyWindow("Canny");

return 0;
}

Visual Studio 2015,OpenCV 版本 2.4.13

最佳答案

我认为,如果您单步执行代码,您将意识到 cvCanny 函数永远不会被触发,doCanny 返回的输出是一个空指针。

OpenCV的Canny边缘检测算法只接受灰度图像,这就是为什么原始代码有“if (in->nChannels != 1)”检查,所以你需要先将你的输入图像转换为灰度图像。

// Convert to grayscale first
IplImage* gray_image = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
cvCvtColor(image, gray_image, CV_BGR2GRAY);

// Perform Canny
IplImage* output = doCanny(gray_image, 200, 201, 3);

另外,我认为你的cvCanny的“aperture”参数也无效,尝试使用默认值3(或5、7),你应该能够看到结果。

我还建议使用 C++ 接口(interface),而不是已弃用的 C 接口(interface)。

关于c - OpenCV 精明;输出图像是纯灰色的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38410645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com