.net - CvMat 和 Imread 与 IpImage 和 CvLoadImage

标签 .net opencv

使用 OpenCv 2.4

我有两个加载图像的选项:

  1- CvMat and Imread

  2- IpImage and CvLoadImage    

哪个更好用?我尝试将两者混合并最终陷入段错误。

最佳答案

imread 返回一个 Mat,而不是 CvMat。它们是两个不同的接口(interface)(Mat/imread 用于 C++ 和 Ipl... 以及 Cv.. 用于 C 接口(interface))。

C++ 接口(interface)更好、更安全且更易于使用。它会自动为您处理内存,并允许您为同一任务编写更少的代码。 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 的特定部分设置为 0。

要创建新的数据副本,请使用 Mat::copyTo 或 Mat::clone();

和C接口(interface)

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

关于.net - CvMat 和 Imread 与 IpImage 和 CvLoadImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11115272/

相关文章:

用于 LBP 训练的 OpenCV traincascade

Python、OpenCV : stopping capture at end of file

c# - Wcf事务

Java 和 .NET 堆开销

python - cv2.namedWindow和imshow无法正常工作

c++ - OpenCV 二进制自适应阈值 OCR

python - 在命令行中捕获 RTSP

c# - 如何从 Web 应用程序在多个客户端上远程执行程序?

c# - 如何避免在 web.config 中添加程序集版本?

c# - 为什么在 ASP.NET Core 中使用 .Result 不会产生死锁?