OpenCV 3.5 习题解答

chap3.5 习题解答

灰色图像显示金字塔状图形。

#include
#include
// chap 3.5
void main()
{
	IplImage* img=cvCreateImage(cvSize(210,210),8,1);
	cvZero(img);// 清零
	int value=0;// 变量:递增灰度值
	int x=0;
	int y=0;
	while((xwidth/2)&&(yheight/2))// x, y 对应小于宽高一半
	{
		// 取ROI中cvRect时,注意 宽度=总宽-2*x, 高度=总高-2*y;
		cvSetImageROI(img,cvRect(x,y,img->width-2*x,img->height-2*y));
		// 由外向内,灰度值递增(20)
		cvAddS(img,cvScalar(20),img);
		// 务必释放img 中的ROI区域,如不释放,则显示不对
		cvResetImageROI(img);
		// 宽度递增10, 高度递增10
		x+=10;
		y+=10;
	}
	cvNamedWindow("img");
	cvShowImage("img",img);
	cvWaitKey(0);

}

运行结果:由外向内,灰度每级递增20.

采用for循环时,注意边界是x和y同时增10,变化相同

void main()
{
	IplImage* img=cvCreateImage(cvSize(210,210),8,1);
	cvZero(img);// 清零
	for(int x=0; x< img->width/2; x+=10)
	{
		// 考虑到 x 和 y 变化相同
		cvSetImageROI(img,cvRect(x,x,img->width-2*x,img->height-2*x));
		cvAddS(img,cvScalar(20),img);
		cvResetImageROI(img);
	}
	cvNamedWindow("img");
	cvShowImage("img",img);
	cvWaitKey(0);
}
运行结果:由外向内,灰度每级递增20.

同样注意释放ROI区域。


你可能感兴趣的:(opencv,opencv,cvSetImageROI)