cvSetImage is to set region of interest by a rect size.
If you program as follows:
cvSetImageROI(image, cvRect(10,10,300,300) ); //cvRect(Left, Top, Width, Height)
Then, The region set by (10,10,300,300) in the image will be prcessed only by functions.
so..
cvSetImageROI(image, cvRect(10,10,300,300) ); //cvRect(Left, Top, Width, Height)
cvSetZero(image);
cvResetImageROI(image);
The region (10,10,300,300) in the image is only set by zero.
and ROI is released by cvResetImageROI function.
But there is one thing to be careful.
//Origin image size is 1024, 768
cvSetIamgeROI(image, cvRect(10, 10, 300, 300) );
image->width; -> ?
image->height; -> ?
What do you think about the value?
the answer is 1024, 768
so if you program as follows:(This is not correct source!!)
cvSetImageROI(image, cvRect(10,10,300,300));
for(int h=0; h< image->height; ++h)
{
for(int w=0; w< image->width; ++w)
{
unsigned char R,G,B;
B = (unsigned char)image->imageData[h*image->widthStep+w*3+0];
G = (unsigned char)image->imageData[h*image->widthStep+w*3+1];
R = (unsigned char)image->imageData[h*image->widthStep+w*3+2];
image->imageData[h*image->widthStep+w*3+0] = (unsigned char)(255-B);
image->imageData[h*image->widthStep+w*3+1] = (unsigned char)(255-G);
image->imageData[h*image->widthStep+w*3+2] = (unsigned char)(255-R);
}
}
cvResetImageROI(image);
The color of whole area of image is inverted.
So If you apply invert processing to the ROI, you have to program as follows:(This is correct source)
for(int h=image2->roi->yOffset; h< image2->roi->yOffset+image2->roi->height; ++h)
{
for(int w=image2->roi->xOffset; w< image2->roi->xOffset+ image2->roi->width; ++w)
{
unsigned char R,G,B;
B = (unsigned char)image2->imageData[h*image2->widthStep+w*3+0];
G = (unsigned char)image2->imageData[h*image2->widthStep+w*3+1];
R = (unsigned char)image2->imageData[h*image2->widthStep+w*3+2];
image->imageData[h*image->widthStep+w*3+0] = (unsigned char)(255-B);
image->imageData[h*image->widthStep+w*3+1] = (unsigned char)(255-G);
image->imageData[h*image->widthStep+w*3+2] = (unsigned char)(255-R);
}
}
Thank you.
Be careful when you use cvSetImageROI~
No comments:
Post a Comment