首先先声明本人也是刚刚开始学习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
很高兴能与你们交流啊;