opencv学习笔记-入门(17)灰度图的理解

参见JILY博客的数字图像处理。
#include "stdafx.h"
#include "iostream"
#include "opencv/cv.h"
#include "opencv/highgui.h"
using namespace std;

//int His[his];
void Convert256toGray(const CvArr * srcarr, CvArr *dstarr);

int main()
{
	IplImage *srcarr = NULL;
	IplImage *dstarr = NULL;
	srcarr = cvLoadImage("E:\\c++\\OPENCV_1\\lena.jpg", 1);
	dstarr = cvCreateImage( cvSize( srcarr->width, srcarr->height ), srcarr->depth, srcarr->nChannels );
	Convert256toGray( srcarr, dstarr );
//	cvCvtColor( srcarr, dstarr, CV_RGBA2GRAY );
	cvNamedWindow("Exmple", CV_WINDOW_AUTOSIZE);
	cvShowImage("Exmple", dstarr);
	cvWaitKey(0);
   
	cvReleaseImage(&srcarr);
	cvReleaseImage(&dstarr);
	cvDestroyWindow("Exmple");
	cin.get();
	cin.get();
	return 0;
}


void Convert256toGray(const CvArr * srcarr, CvArr *dstarr)
{
	CvMat sstub, *src = cvGetMat( srcarr, &sstub );
	CvMat dstub, *dst = cvGetMat( dstarr, &dstub );

	CvSize size = cvGetSize(src);

	for ( int y = 0; y < size.height; y++ )
	{
		uchar* sptr = src->data.ptr + src->step*y;
		uchar *Dataout = dst->data.ptr + dst->step*y;
		for ( int x = 0; x < size.width; x++, Dataout+=3, sptr+=3)
		{
			Dataout[1] = ( sptr[1] * 30 + sptr[2] * 59 + sptr[3] * 11 ) / 100;
			Dataout[2] = ( sptr[1] * 30 + sptr[2] * 59 + sptr[3] * 11 ) / 100;
			Dataout[3] = ( sptr[1] * 30 + sptr[2] * 59 + sptr[3] * 11 ) / 100;
		}
	}

}


你可能感兴趣的:(C++,DST,图像处理)