OpenCV 3.6 习题解答

chap 3.6

原始彩色图像 img ,cvSize( 640,480),  8U , C 3.

目标彩色图像 dst 显示为 img 图像的(5,10) ( 50,60)。

这个和 cvSetImageRO I ( img,  cvRect(5, 10,  50-5,  60-10)类似。

为了显示效果明显:图像终点改为(250,260)

#include
#include
// chap 3.6
void main()
{
	using namespace std;
	IplImage* img=cvLoadImage("she.bmp");// img
	// dst 大小为(5,10) 到 (250, 260),和 img 相同位宽8U,相同通道数3.
	IplImage* dst=cvCreateImage(cvSize(250-5,260-10),img->depth,img->nChannels);
	cout<<"img->depth="<depth<<"  "<<"img->nChannels="<nChannels<depth="<depth<<"   "<<"dst->nChannels="<nChannels<origin=img->origin; // 原点一致,左上角
	dst->widthStep=img->widthStep;// 图像偏移量一致
	// dst 数据头指向 img中的(5,10),数据尾(250,260)
	for(int y=10;y<260;y++)
	{
		for(int x=5;x<250;x++)
		{
			// 参考pp:53 例3-13
			dst->imageData=(img->imageData + y*img->widthStep)+x*img->nChannels;
		}
	}
	cvNamedWindow("source");
	cvShowImage("source",img);
	cvNamedWindow("dst");
	cvShowImage("dst",dst);
	cvWaitKey(0);
}

运行结果:

dst 为 img 中的 cvRect( 5, 10, 250 -5, 260 -10 ) 区域内图像。
其中,数据的读取可以参考教材pp:53 , 例 3-13 。

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