初次接触,留作参考
读取图像
img = imread(pFileName, CV_LOAD_IMAGE_GRAYSCALE);
判断图像是否为空,用于判断图像是否读取成功
img.empty()
显示图像
imshow("input: ",img);
复制图像
image1 = image.clone() ;//完全拷贝,把image中的所有信息拷贝到image1中
image1 = image.copyto(); // 和clone差不多
image1 = image; // 只复制了图像的头部信息,数据部分是共享的
释放内存
mat.release()
这个貌似需要手动调用才行,否则有些情况下内存不会释放
比如我在下面的函数中调用了一个imread读取了一个图片,如果我不在读取之前释放内存,似乎这片内存就泄漏了。
void cvMISCDFT::loadPicture(const char * fileName)
{
char * pFileName = (char *)fileName;
if(!pFileName)
{
pFileName =(char *)DEFAULT_PICTURE;
}
//m_img.release();
//m_mag.release();
m_img = imread(pFileName, CV_LOAD_IMAGE_GRAYSCALE);
if(m_img.empty())
{
return;
}
在外面,调用while(1)
{
dft.loadPicture();
}
在top中,可以看到进程占用的内存越来越多。
如果在在imread之前调用了release,则占用的内存不会增加。具体在什么时候需要release还需要研究。