使用 OpenCv 2.4
我有两个选项来加载图像:
1- CvMat and Imread
2- IpImage and CvLoadImage
使用哪一个更好?我尝试将两者混合并最终出现段错误。
imread
返回一个Mat
, not CvMat
。它们是两个不同的接口(Mat
/imread
对于 C++ 和 Ipl...以及 Cv.. 对于 C 接口)。
C++ 接口更好、更安全、更易于使用。它会自动为您处理内存,并允许您为同一任务编写更少的代码。 OpenCV 人员提倡使用 C++,除非某些非常具体的项目要求迫使您使用 C。
示例(C++)
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();
// end code here
请注意,如果没有另外说明,所有矩阵分配都引用相同的数据。在上面的例子中,crop
矩阵指向image
,并将其设置为零将设置该特定部分image
to 0.
要创建新的数据副本,请使用 Mat::copyTo 或 Mat::clone();
和C接口
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.
// end code here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)