学习opencv ,第六章第四题

4. 在一个画图程序里,例如PowerPoint,画一系列同心圆形成一个靶心

a.构造一系列进入靶心的直线,保存图像

b.用一个3*3的中孔大小,对你的图像运行并显示一阶x和y方向的层数,

然后将中孔大小增加到5*5,9*9和13*13. 描述结果

#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <iostream>

using namespace std;
const CvSize size = cvSize(700,700);
void fun4()
{
	IplImage *src = cvCreateImage(size,IPL_DEPTH_8U,1);
	cvZero(src);

	CvRNG rng_state = cvRNG(-1);
	for(int r = 100; r < MIN(size.height/2,size.width/2); r += 40){
		int thickness = MAX(10*cvRandReal(&rng_state),1);
		cvCircle(src,cvPoint(size.width/2,size.height/2),r,CV_RGB(255,255,255),thickness);
	}
	cvShowImage("src_a",src);
	
	for(double alpha = 0;alpha < 2*CV_PI ;alpha += CV_PI/6){
		CvPoint pt1,pt2;
		int r = MIN(size.width/2,size.height/2);
		pt1 = cvPoint(size.height/2,size.width/2);
		pt2 = cvPoint(pt1.x + r*cos(alpha),pt1.y - r*sin(alpha));
		int thickness = MAX(5*cvRandReal(&rng_state),1);
		cvLine(src,pt1,pt2,CV_RGB(255,255,255),thickness);
	}
	cvShowImage("src_b",src);
	cvWaitKey();
	const int aperture[4] = {3,5,9,13};
	IplImage *dst = cvCreateImage(size,IPL_DEPTH_16S,1);
	cvZero(dst);
	for(int i = 0; i<4 ;i++){
#if 1
		char title_x[20],title_y[20];
		sprintf(title_x,"dst_x_%1d*%1d",aperture[i],aperture[i]);
		sprintf(title_y,"dst_y_%1d*%1d",aperture[i],aperture[i]);
		cvSobel(src,dst,1,0,aperture[i]);
		cvShowImage(title_x,dst);
		cvSobel(src,dst,0,1,aperture[i]);
		cvShowImage(title_y,dst);
#else
		char title[20];
		sprintf(title,"dst_1d*%1d",aperture[i],aperture[i]);
		cvSobel(src,dst,1,1,aperture[i]);
		cvShowImage(title,dst);
	}
#endif
	cvWaitKey(0);

	cvReleaseImage(&src);
	cvReleaseImage(&dst);
	cvDestroyAllWindows();
}





你可能感兴趣的:(DST,fun,powerpoint)