问题:在opencv中,取一幅图像src的子区间roi,在该roi里面分析,得到子区间roi的子区间roi2。如何把子区间里面的roi2的坐标还原到src。
解决:函数在下面给出,相关主函数自行添加
void RoiTest()
{
char filename[100];
int count=1;
Mat src;
Mat subsrc;
Rect grinder_test_roi;
Rect sub_test_roi;
Rect dst_test_roi;
sprintf(filename,"D:/frame3/%04d.jpg",count);
src=imread(filename);
if(!src.data)
{
return;
}
grinder_test_roi.y=cvRound(src.rows/2.5);//行起始点坐标
grinder_test_roi.x=0;//列起始点坐标
grinder_test_roi.height=src.rows-grinder_test_roi.y;
grinder_test_roi.width=cvRound(src.cols/2);
rectangle(src, grinder_test_roi.tl(), grinder_test_roi.br(), Scalar(0,255,0), 3);
//imshow("grinderRoi",src);
subsrc=src(grinder_test_roi);
sub_test_roi.y=cvRound(subsrc.rows/2.5);
sub_test_roi.x=0;
sub_test_roi.height=subsrc.rows-sub_test_roi.y;
sub_test_roi.width=cvRound(subsrc.cols/2);
rectangle(subsrc, sub_test_roi.tl(), sub_test_roi.br(), Scalar(0,0,255), 3);
imshow("subRoi",subsrc);
dst_test_roi.y=sub_test_roi.y+grinder_test_roi.y;//坐标还原过程
dst_test_roi.x=sub_test_roi.x+grinder_test_roi.x;
dst_test_roi.height=sub_test_roi.height;
dst_test_roi.width=sub_test_roi.width;
rectangle(src, dst_test_roi.tl(), dst_test_roi.br(), Scalar(255,0,0), 3);
imshow("grinderRoi",src);
waitKey();
}