Opencv CvMat和Imread与IpImage和CvLoadImage的对比
使用OpenCv 2.4 我有两个选项可以加载图像:Opencv CvMat和Imread与IpImage和CvLoadImage的对比,opencv,opencvdotnet,Opencv,Opencvdotnet,使用OpenCv 2.4 我有两个选项可以加载图像: 1- CvMat and Imread 2- IpImage and CvLoadImage 哪一个更好用?我试着把这两者混合在一起,结果陷入了seg故障 imread返回一个Mat,而不是CvMat。它们是两个不同的接口( Mat > />代码> IcRead C++和IPL……和C……C接口)。p> < C++界面更友好、更安全、更容易使用。它自动为您处理内存,并允许您为同一任务编写更少的代码。OpenCV的人主张
1- CvMat and Imread
2- IpImage and CvLoadImage
哪一个更好用?我试着把这两者混合在一起,结果陷入了seg故障
imread
返回一个Mat
,而不是CvMat
。它们是两个不同的接口(<代码> Mat <代码> > />代码> IcRead <代码> C++和IPL……和C……C接口)。p>
< C++界面更友好、更安全、更容易使用。它自动为您处理内存,并允许您为同一任务编写更少的代码。OpenCV的人主张使用C++,除非一些非常具体的项目要求迫使你去C. < /P>
示例(C++)
请注意,如果没有另外说明,所有矩阵赋值都引用相同的数据。在上面的示例中,裁剪
矩阵指向图像
,将其设置为零将图像的特定部分设置为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
IplImage和Mat都是可转换的
我建议您使用Mat和imread(),因为从Mat获取数据非常容易
Mat::data返回一个指向实际矩阵数据的指针,该指针位于1D中,其值易于访问
如果您想在OpenCV中为各种跟踪算法(例如OpenTLD)添加机器学习概念,可以使用Mat.data轻松访问数据,以获取指向实际矩阵的指针
OpenCV的许多实用程序(如CalcOpticalFlowPyrLK等)都需要Mat。我建议你用垫子。IplImage现在已经过时了。这取决于您对指针的熟悉程度。在IplImage中,您可以通过以下方式访问数据:
data[i*widthstep+j*nchannels +k]
其中i,j,k是一些整数,这是一个非常容易的方法。在三维的正规矩阵中,数据的存取并不容易。对于标准矩阵,数据访问是针对[i][j]
*(*(a + i) + j) is the value of jth element of ith row in matrix a
从OpenCV_2食谱:
此结构是从IPL库继承的
(即英特尔图像处理库)现已与IPP库(英特尔
集成性能原语库)。如果使用使用创建的代码和库
在旧的C接口中,您可能需要操作那些IplImage结构。幸运的是,
有一种方便的方法可以将IplImage转换为cv::Mat对象
IplImage*IplImage=cvLoadImage(“c:\img.jpg”);
cv::Mat image4(iplImage,假)
函数cvLoadImage是用于加载图像的C接口函数。第二个参数
在cv::Mat对象的构造函数中,表示不会复制数据(将其设置为
如果需要新副本,则为true,而false是默认值,因此可以忽略它),
也就是说,IplImage和image4将共享相同的图像数据。你需要小心
这里不创建悬空指针。因此,封装IplImage更安全
指向OpenCV 2提供的引用计数指针类的指针:
cv::Ptr iplImage=cvLoadImage(“c:\img.jpg”)
否则,如果需要释放IplImage结构所指向的内存,则
需要明确地做到这一点:
cvReleaseImage(&iplImage);
请记住,您应该避免使用这种不推荐的数据结构。相反,始终使用
cv::垫
*(*(a + i) + j) is the value of jth element of ith row in matrix a