OpenCV图像操作-图像反色操作

16 篇文章 0 订阅
本文介绍如何使用MFC工程在Windows平台上实现从文件中读取图像,将其反色,并在两个不同的窗口分别显示原始图像和反色后的图像。通过OpenCV库的操作,展示了图像处理的基本步骤,包括加载图像、获取图像属性、进行反色操作以及显示图像。同时,介绍了如何保存反色后的图像到文件中。
摘要由CSDN通过智能技术生成

创建MFC工程,从文件中读入一幅图像,将之反色,然后显示原图片和反色之后的图片。

  1. /*******************************************************************************
  2. 函数名称  : MakeMat
  3. 函数描述  : 使用OpenCV进行图像操作
  4. 输入参数  : N/A
  5. 输出参数  : N/A
  6. 返 回值    : N/A
  7. 作  者      :  hewenming 2012.11.14
  8. *******************************************************************************/  
  9. void MakeMat() 
  10.      IplImage* src = NULL; 
  11.  
  12.      //加载图片至内存 
  13.      src = cvLoadImage("750x500_1126054.bmp"); 
  14.      if (NULL == src) 
  15.      { 
  16.          AfxMessageBox(_T("图片加载失败!")); 
  17.          return
  18.      } 
  19.  
  20.      //获取图片的一些属性 
  21.      int height = src->height;                     // 图像高度 
  22.      int width = src->width;                       // 图像宽度(像素为单位) 
  23.      int step = src->widthStep;                 // 相邻行的同列点之间的字节数 
  24.      int channels = src->nChannels;         // 颜色通道数目 (1,2,3,4) 
  25.      uchar *data   = (uchar *)src->imageData; 
  26.  
  27.  
  28.      //创建标题名为“美女”的对话框 
  29.      cvNamedWindow("美女"); 
  30.      cvMoveWindow("美女", 600, 250);  
  31.  
  32.      //创建名为“反色”的对话框 
  33.      cvNamedWindow("反色"); 
  34.      cvShowImage("美女",src); 
  35.  
  36.  
  37.      //反色操作 
  38.      for(int i=0;i != height; ++ i)  
  39.      { 
  40.          for(int j=0;j != width; ++ j) 
  41.          { 
  42.              for(int k=0;k != channels; ++ k) 
  43.              { 
  44.                   data[i*step+j*channels+k]=255-data[i*step+j*channels+k];  
  45.              } 
  46.          } 
  47.      }  
  48.          
  49.  
  50.      //将图片显示到对话框中 
  51.      cvShowImage("反色",src); 
  52.      cvWaitKey(0); 
  53.  
  54.      //释放内存与对话框销毁 
  55.      cvReleaseImage(&src); 
  56.      cvDestroyWindow("美女"); 
  57.      cvDestroyWindow("反色"); 
  58.  
  59.      //退出 
  60.      exit(0); 
/******************************************************************************* 
函数名称  : MakeMat
函数描述  : 使用OpenCV进行图像操作
输入参数  : N/A 
输出参数  : N/A 
返 回值    : N/A 
作  者      :  hewenming 2012.11.14
*******************************************************************************/ 
void MakeMat()
{
	 IplImage* src = NULL;

	 //加载图片至内存
	 src = cvLoadImage("750x500_1126054.bmp");
	 if (NULL == src)
	 {
		 AfxMessageBox(_T("图片加载失败!"));
		 return;
	 }

	 //获取图片的一些属性
	 int height = src->height;                     // 图像高度
	 int width = src->width;                       // 图像宽度(像素为单位)
	 int step = src->widthStep;                 // 相邻行的同列点之间的字节数
	 int channels = src->nChannels;         // 颜色通道数目 (1,2,3,4)
	 uchar *data   = (uchar *)src->imageData;


	 //创建标题名为“美女”的对话框
	 cvNamedWindow("美女");
	 cvMoveWindow("美女", 600, 250); 

	 //创建名为“反色”的对话框
	 cvNamedWindow("反色");
	 cvShowImage("美女",src);


	 //反色操作
	 for(int i=0;i != height; ++ i) 
	 {
		 for(int j=0;j != width; ++ j)
		 {
			 for(int k=0;k != channels; ++ k)
			 {
				  data[i*step+j*channels+k]=255-data[i*step+j*channels+k]; 
			 }
		 }
	 } 
		

	 //将图片显示到对话框中
	 cvShowImage("反色",src);
	 cvWaitKey(0);

	 //释放内存与对话框销毁
	 cvReleaseImage(&src);
	 cvDestroyWindow("美女");
	 cvDestroyWindow("反色");

	 //退出
	 exit(0);
}


如果想保存反色后的图像,添加以下代码即可:

  1. //保存反色后的图像 
  2. cvSaveImage("反色.bmp",src); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值