OpenCV简单例子之彩图转化为灰度图

首先先声明本人也是刚刚开始学习OpenCV,希望我能与大家一起分享交流学习经验哈。

 

最近学了一些OpenCV的一些简单例子,希望能够帮助我们这些OpenCv初学者。

 

首先OpenCV还不会安装和配置的娃可以参考我的另一篇博客http://blog.jhonse.com/index.php/archives/1073.jhonse

 

这篇主要说的是将彩色图转换为灰度图片;

#include"cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"ml.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cvaux.lib")
#pragma comment(lib,"cxcore.lib")   

int main(){
   IplImage * src=0;
   
   src=cvLoadImage(".\\hobe.jpg");         //导入图片;
   if(!src) {cout<<"fail to load image";exit(0);} //条件判断;

   
   int height=src->height;   //获取导入图片的宽和高;
   int width=src->width;

   uchar* data=(uchar*)src->imageData;  //获取图片的数据;
   int channels=src->nChannels;          //获取图片的通道数;
   int step=src->widthStep;           //获取图片单行的总字节数;

    IplImage * gray=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);//创建一张用来存放灰度图片的IplImage指针;
    uchar* gray_data=(uchar*)gray->imageData;  //获取图片的数据;

   
   /*************将彩色图片转化为灰度图片的两种方法*********/
 

//方法1:用cvCvtColor(src,dst,code)  //code=CV_<X>2<Y>   <X>,<Y>=RGB,BGR,GRAY,HSV,XYZ,HLS,Luv....;	
//ps: 通道必须为1;就是IplImage * gray=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);中把3改成1;
	
//cvCvtColor(src,dst,CV_BGR2GRAY);   //你可以把注释符号去掉试试看 ;

//方法2:直接转化; 
  //ps:通道数必须和彩色图(即src)一样 都是3;
  

 for(unsigned i=0;i<height;i++){
      for(unsigned j=0;j<width;j++)
	  {
		  for(unsigned k=0;k<channels;k++)
     gray_data[i*step+j*channels+k]=data[i*step+j*channels+0]*0.114
	 +data[i*step+j*channels+1]*0.587+data[i*step+j*channels+3]*0.299;    //转换为灰度图像;
      
    }
   }
  /*  int c=img->nChannels;
   cout<<c;
*/
   cvNamedWindow("win",1);     //创建窗口;
   cvMoveWindow("win",50,50);   //移动窗口;

   cvShowImage("win",gray);  //显示图片;
   cvWaitKey(0);          //等待键入;
   cvSaveImage(".\\hobe_after_transition.jpg",gray);
   cvReleaseImage(&src);  //释放图片;
   cvReleaseImage(&gray);
return 0;
}


 

 

 

转换后的效果;

 

 

图片的话你们自己弄一张把。就是注意路径哦;

 

如果有问题请联系我 QQ1915699835    email:1915699835@qq.com 

很高兴能与你们交流啊;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值