openCV之读取图像

opencv中读取图像的函数有两种方式:

1、Mat Imread;

2、IplImage CvLoadImage;

如何选择呢,先看一下两者的区别吧!

首先,Mat Imread用于C++接口,IplImage CvLoadImage用于C接口,需要说明的是C++接口会自动分配和释放内存,所以一般大家会选择前者,除非一些特殊的工程中要求用c接口。

然后,imread的定义在highgui.hpp中,cvloadimage的定义在highgui-c.h中,而highgui.hpp和highgui-c.h都包含在highgui.h中,所以我们在写程序是只要包含了highgui.h,那么我们就可以用两个接口。

先看一个例子:()

void  main()
{
 cv::Mat img = cv::imread("D:\\图片资料
\\good\\10.jpg");
 if(img.empty())
  return;
 cv::imshow ("image",img);
 cv::Mat bw=img>128;//阈值二值话
 cv::Mat crop=img(cv::Rect (0,0,100,100));//裁切
 crop=0;//设置裁切图片为0
 cv::imshow ("crop",crop);
 cv::waitKey (100);
 //return(0);
}

请注意,如果没有另外说明,所有的矩阵赋值引用的都是相同的数据。另外,在上述的例子中,对img修剪并将其设为0,这将设置的图象的特定部分为0。

如果想create a new copy of data,使用Mat::copyTo或者Mat::clone().

void  main()
{
 cv::Mat img = cv::imread("D:\\图片资料
\\xx.jpg");
 if(img.empty())
  return;
 
 cv::Mat bw=img>128;//阈值二值话
 Mat Img=img.clone();
 Mat G;
 Img.copyTo (G);//此处注意要先声明一个对象然后再对对象copy

 cv::imshow ("image",Img);
 cv::Mat crop=img(cv::Rect (0,0,100,100));//裁切
 crop=0;//设置裁切图片为0
 cv::imshow ("crop",crop);
 cv::waitKey (100);
 //return(0);
}

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.

 

作为初学者且跨专业的我及其他小伙伴们:

#include "opencv2/opencv.hpp"
#include "cxcore.hpp"
#include "cv.h"
#include "highgui.h"

添加这些头文件就可以opencv的基本操作了,

using namespace cv;如果有这句话就可以直接Mat操作而不用cv::Mat。

你可能感兴趣的:(opencv,opencv,c++)