// opencv2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <highgui.h>
#include <cv.h>
#include <iostream>
using namespace std;
void main( )
{
IplImage* src_img=cvLoadImage("放鸽子女神.jpg",-1); //读入图像
IplImage* dst_img; //定义目标图像头;
CvRect ROI_rect_src; //源图像ROI的位置以及大小
CvRect ROI_rect_dst; //目标图像的ROI
cvNamedWindow("src_img",CV_WINDOW_AUTOSIZE);
cvMoveWindow("src_img", 200, 200); // 设置源图像输出的窗口位置
cvShowImage("src_img",src_img); //输出源始图像未设置ROI区域
cvWaitKey(800);
//cvSetImageROI函数基于给定的矩形设置感兴趣区域
// cvShowImage函数将只会显示 ROI指定区域
ROI_rect_src.x=0;
ROI_rect_src.y=0;
ROI_rect_src.width=120;
ROI_rect_src.height=100;
cvSetImageROI(src_img, ROI_rect_src);
cout<<"输出原图像的ROI区域"<<endl;
cout<< (src_img->roi->xOffset) <<" "<< (src_img->roi->yOffset) <<endl;
cout<< (src_img->roi->width) <<" "<< (src_img->roi->height) <<endl<<endl;
cvShowImage("src_img",src_img); //输出设定ROI后的原始图像
//------------ 函数 cvCloneImage实现图像的完整拷贝包括头、ROI和数据 ---------------
dst_img=cvCloneImage(src_img);
//-----------函数cvGetImageROI得到图像的ROI区域---------------------------
ROI_rect_dst=cvGetImageROI(dst_img);
cout<<"输出目标图像的ROI区域"<<endl;
cout<<ROI_rect_dst.x<<" "<<ROI_rect_dst.y<<endl;
cout<<ROI_rect_dst.width<<" "<<ROI_rect_dst.height<<endl;
cvNamedWindow("dst_img",CV_WINDOW_AUTOSIZE);
cvMoveWindow("dst_img", 400, 200); //设置目标图像输出的窗口位置
cvShowImage("dst_img",dst_img); //显示图像
cvWaitKey(800);
cvResetImageROI(dst_img); //释放目标图像的ROI
cvShowImage("dst_img",dst_img); //显示释放图像的ROI的源图像
cvWaitKey(0);
cvReleaseImage(&src_img); //释放图像
cvReleaseImage(&dst_img);
}