gpu*_*guy 8 opencv opencvdotnet
使用OpenCv 2.4
我有两个加载图像的选项:
1- CvMat and Imread
2- IpImage and CvLoadImage
Run Code Online (Sandbox Code Playgroud)
哪一个更好用?我尝试将两者混合并以seg故障结束.
Sam*_*Sam 14
imread返回a Mat,而不是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
Run Code Online (Sandbox Code Playgroud)
注意,如果没有另外说明,则所有矩阵分配都引用相同的数据.在上面的示例中,crop矩阵指向image并将其设置为零将该特定部分设置image为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
Run Code Online (Sandbox Code Playgroud)