canny2

根据上一篇所说应该进行的一步就是灰度化。

看了一个大牛的代码,他使用的是IplImage* cvLoadImage。

那么问题来了,平时用的都是imread为什么会用IplImage* cvLoadImage。

找到原因:

1.imread是C++接口,cvloadimage是c接口。
2.imread的定义在highgui.hpp中,cvloadimage的定义在highgui-c.h中,而highgui.hpp和highgui-c.h都包含在highgui.h中,所以我们在写程序是只要包含了highgui.h,那么我们就可以用两个接口。

OpenCV提供C接口和C++接口,功能是一样的。选用何种接口,完全取决于个人爱好。
如果你的程序是C风格的,最好选用C接口,如果是C++风格的,最好选用C++接口。
C接口的很多函数需要配对使用,比如:创建矩阵后需要释放矩阵,相对来说,代码量要大一些,一个不小心就会出现内存泄漏。尽量还是使用C++。

通过大家的介绍说明二者没有什么特别大的区别,因此还是可以继续用imread。

但是这样是不可以的!!!!!!!!!!!!

因为会出现mat类型不能到Ip1Image

IplImage*colorImage = imread("D:\\anzhuang\\vsworkspace\\canny1\\1.jpg");

另一个C++关键,Mat.empty()判断是否为空,不能用==NULL

	if (src.empty())
	{
		printf("image read error");
		return 0;
	}

猜你喜欢

转载自blog.csdn.net/tudoufanqietudou/article/details/82318754
今日推荐