图片的灰度图

来源:互联网 发布:算法与复杂性论文 编辑:程序博客网 时间:2024/04/28 00:29

练习一下灰度图

// HelloOpenCV.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <math.h>#include <cv.h>#include <highgui.h>#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) int main(int argc, _TCHAR* argv[]){IplImage* src = 0;  const char * imagePath = "C:\\Users\\lenmovo\\Pictures\\Lena.jpg";// load an image  src=cvLoadImage(imagePath);IplImage* dst_gray = ::cvCreateImage(cvGetSize(src),src->depth,1);cvSetZero(dst_gray);//cvCvtColor(src,dst_gray,CV_BGR2GRAY);//得到灰度图// get the image data       int height    = src->height;      int width     = src->width;      int step      = src->widthStep;      int channels  = src->nChannels;      uchar* data      = (uchar *)src->imageData;    printf("Processing a %dx%d image with %d channels\n",height,width,channels);         for(int i=0;i<height;i++) for(int j=0;j<width;j++) for(int k=0;k<channels;k++)  {int ddd = data[i*step+j*channels+k];int ttt = (uchar)src->imageData[i*step+j*channels+k];printf(" %d, %d \n",ddd,ttt); //data[i*step+j*channels+k]=255-ddd;  }uchar* dstData = (uchar*)dst_gray->imageData;//使用Gray = (R*30 + G*59 + B*11 + 50) / 100来得到灰度for(int i=0; i<src->height; i++)for(int j=0; j<src->width; j++){ int b = (uchar)src->imageData[i*src->widthStep+j*src->nChannels];int g = (uchar)src->imageData[i*src->widthStep+j*src->nChannels+1];int r = (uchar)src->imageData[i*src->widthStep+j*src->nChannels+2];int mm = (r*30 + g*59+b*11+50)/100;dstData[i*dst_gray->widthStep+j] = mm;//((uchar *)(dst_gray->imageData + i*dst_gray->widthStep))[j]=mm;}cvShowImage("RGB", dst_gray); cvWaitKey(0);::cvReleaseImage(&src);::cvReleaseImage(&dst_gray);    return 0; }