函数原型如下:
#include "stdafx.h" #include "cv.h" #include "highgui.h" int main(int argc,char* argv[]) { IplImage *src,*dst,*dst_temp; src=cvLoadImage("c:\\lena.jpg",1); dst=cvLoadImage("c:\\cat.jpg",1); dst_temp=cvCreateImage(cvGetSize(src),src->depth,src->nChannels); cvResize(dst,dst_temp); cvAnd(src,dst_temp,src); cvNamedWindow("image"); cvShowImage("image",src); cvSaveImage("c:\\01.jpg",src); cvReleaseImage(&src); cvReleaseImage(&dst); cvDestroyWindow("image"); cvWaitKey(0); return 0; }好像cvAdd()函数要求src和dst都必须是相同的size,所以在程序开始时,我把它们的大小进行统一。
而cvAddS()函数,我用原图片进行加value,好像有一点问题,
运行时出现错误 0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0011f194 处的 cv::Exception。
这是一个经常出现的问题,好像说是因为内存分配不足照成的,但是我查阅了好多资料,都是说内存的问题,但是我在申请资源是都是在后边释放的,具体为什么,一直没弄明白,所以在程序开头,我把图片尺寸变小一点,这样分配内存时,可以运行了,而且这里CvScalar s=cvScalar(0,0,100),一个图片中的通道时BGR这样分布的,所以cvScalar时,val[]里面存储的数字就不一样,正好可以和不同的通道进行位与运算,从而改变不同通道的像素值。
#include "stdafx.h" #include "cv.h" #include "highgui.h" int main(int argc, char* argv[]) { IplImage *src,*dst; src=cvLoadImage("c:\\lena.jpg",1); CvSize size=cvSize(200,200); dst=cvCreateImage(size,src->depth ,src->nChannels ); cvResize(src,dst); CvScalar s=cvScalar(0,0,100); cvAddS(dst,s,dst); cvNamedWindow("hello"); cvShowImage("hello",dst); cvSaveImage("c:\\001.jpg",dst); cvReleaseImage(&src); cvDestroyWindow("hello"); cvWaitKey(0); system("pause"); return 0; }