2

我从视频中加载了一张图片:

 Image<Gray, byte> imGray=cap.QueryGrayFrame();  

现在,我想使用 openCv 中的 cvCornerHarris 函数,如下所示:

 Image<Gray, byte> harRes = new Image<Gray, byte>(imGray.Size);  
 CvInvoke.cvCornerHarris(imGray, harRes, 8, 3, 0.04); 

但我得到一个 cvException:

OpenCV: src.size() == dst.size() && dst.type() == CV_32FC1 Error

在此处输入图像描述

我应该如何解决这个问题?

4

2 回答 2

3

我不确定 C# 包装器,但在 C++ 中,您可以使用以下行更改像素格式:

imGray.convertTo(A, CV_32F);

错误说,图像的大小应该匹配(你的代码做同样的事情)并且像素格式应该是 float32,而你的可能不是。

于 2012-10-31T17:54:28.520 回答
3

您可以从给定的异常中推断出目标图像的类型应该是CV_32FC1.

在您的情况下,目标图像是harRes,您已将其声明为:

Image<Gray, byte> harRes = new Image<Gray, byte>(imGray.Size);

此图像的类型是CV_8UC1

它应该声明为:

Image<Gray, float> harRes = new Image<Gray, float>(imGray.Size);

现在它的类型是CV_32FC1,这是函数所期望的类型cvCornerHarris

于 2012-10-31T19:11:35.460 回答