您的位置:首页 > 其它

Mat imread 与 IplImage cvLoadImage区别

2015-06-03 22:31 274 查看
Mat imread 与 IplImage cvLoadImage区别

原文地址 http://blog.163.com/yuyang_tech/blog/static/21605008320132510104620/
Q : I have two options to load images: 来源1

1- Mat and Imread

2- IplImage and CvLoadImage

Which one is better to use?

A : They are the two different interfaces (
Mat
/
imread
for C++ and Ipl... and Cv.. for C interface
). The C++ interface is nicer,
safer and easier to use
. It automatically handles memory for you, and allows you to write less code for the same task. The OpenCV guys advocate for the usage of C++, unless some very specific project requirements force you to C.

Example (C++)
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">cv::Mat image = imread("path/to/myimage.jpg")
if(image.empty())
return;
cv::imshow("Image", image);
cv::Mat bw = image > 128; // threshold image
cv::Mat crop = image(cv::Rect(0, 0, 100, 100)); // a 100px x 100px crop
crop= 0; // set image to 0
cv::waitKey();</p>

Note that if not stated otherwise, all matrix assignments reference the same data. In the example above, the crop matrix points to image, and setting it to zero will set that specific part of the image to 0.


To create a new copy of data, use Mat::copyTo, or Mat::clone();

And the C interface
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">IplImage* pImg = CvLoadImage("path/to/myimage.jpg");
if(pImg == NULL)
return;
// ... big bloat to do the same operations with IplImage
CvShowImage("Image", pImg);
cvWaitKey();
CvReleaseImage(&pImg); // Do not forget to release memory.</p>

另:来源2

1.imread是C++接口,cvloadimage是c接口。
2.imread的定义在highgui.hpp中,cvloadimage的定义在highgui-c.h中,而highgui.hpp和highgui-c.h都包含在highgui.h中,所以我们在写程序是只要包含了highgui.h,那么我们就可以用两个接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: