求《学习OpenCV》这本书的课后习题的答案!该怎么处理

求《学习OpenCV》这本书的课后习题的答案!
为一个图像创建多个图像头。读取至少100*100的图像。另创建两个图像头并设置它们的origion,depth,nChannels和widthstep属性跟之前读取的图像一样。在新的图像中,设置宽度为20,高度为30.最后,将imgaeData指针分别指向(5,10)(50,60)像素位置。传递这两个新的图像头给cvNot(),最后显示最初读取的图像,在那个大图像中应该有两个矩形,矩形内的值是原始值的求反值。
这题这么写?谁有《学习OpenCV》这本书的课后习题的答案???

------解决方案--------------------
#include "stdafx.h"
#include <highgui.h>
#include <cv.h>


int _tmain(int argc, _TCHAR* argv[])
{
CvMat* img = cvCreateMat(100, 100, CV_8UC3);
cvZero(img);
unsigned char* imgPtr =(unsigned char*) cvPtr2D(img, 0, 0);
imgPtr++;
CvPoint pt1 = cvPoint(20, 5);
CvPoint pt2 = cvPoint(40, 20);

/*for (int row=0; row<img->rows; row++){
imgPtr = (unsigned char*)img->data.ptr + row * img->step;
imgPtr++;
for (int col=0; col<img->cols; col++){
if (((row>=20) && (row<=40)) && ((col>=5) && (col<=20))){
*imgPtr = 255;
}
imgPtr ++;
imgPtr ++;
imgPtr ++;
}
}*/
CvScalar color = cvScalar(0, 255, 0);
cvRectangle(img, pt1, pt2, color);

cvNamedWindow( "Ex3x", CV_WINDOW_AUTOSIZE);
cvShowImage("Ex3x", img);
cvWaitKey(0);

cvReleaseMat(&img);
cvDestroyWindow("Ex3x");
return 0;
}
------解决方案--------------------
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>


int main(int argc, char** argv)
{
IplImage* img = cvLoadImage(argv[1],1);

IplImage* des1 = cvCreateImageHeader(cvSize(100, 100), img->depth, img->nChannels);
IplImage* des2 = cvCreateImageHeader(cvSize(100, 100), img->depth, img->nChannels);

des1->origin = img->origin;
des2->origin = img->origin;
des1->widthStep = img->widthStep;
des2->widthStep = img->widthStep;

des1->imageData = img->imageData + 10 * img->widthStep + 5 * img->nChannels;
des2->imageData = img->imageData + 60 * img->widthStep + 50 * img->nChannels;

cvNot(des1, des1);
cvNot(des2, des2);

cvNamedWindow("Ex6x", CV_WINDOW_AUTOSIZE);
cvShowImage("Ex6x", img);
cvWaitKey( 0 );
cvReleaseImage(&img);
cvDestroyWindow("Ex6x");

return 0;
}

尺寸自己改一下