ROI(관심 영역) 설정과 영상 정보 출력

2020. 9. 28. 21:59Open CV

 

OpenCV로 ROI(관심 영역)설정하는 방법은 엄청 쉽습니다.

 

cvLoadImage의 경로는 자신의 사진이나 영상데이터가 있는 곳으로 바꿔 주세요.

 

#include <opencv\highgui.h>

#include <opencv\cv.h>





using namespace cv;



void main ()

{

IplImage * Img = cvLoadImage ("C:/Users/Documents/Visual Studio 2010/Projects/openCV test/openCV test/images/tx.jpg");

IplImage * Img_copy = (IplImage*)cvClone(Img);



cvSetImageROI(Img_copy, cvRect(100,150,140,100));



cvShowImage("Origin", Img);

cvShowImage("ROI", Img_copy);



cvWaitKey(0);



cvReleaseImage(&Img);

cvReleaseImage(&Img_copy);



cvDestroyWindow("Oorigin");

cvDestroyWindow("ROI");



}

이렇게 하면 제가 원하는 사진의 영역을 딱 돌여내어 표시해 줍니다.

새로운 팝업창으로 말이죠!

<ROI 결과 값>

나는 여기서 지난 포스팅 https://monorailcode.tistory.com/13 의 영상 정보까지 출력하고 싶다면,

#include <opencv\highgui.h>

#include <opencv\cv.h>

#include <opencv2\core\core.hpp>

#include <iostream>

#include <opencv2\opencv.hpp>





using namespace cv;



void main ()

{

            uchar*data;

			IplImage*image;



IplImage * img1 = cvLoadImage ("C:/Users/Documents/Visual Studio 2010/Projects/openCV test/openCV test/images/tx.jpg");



    Mat ROI_mat;

	IplImage *img3;

	img3 = (IplImage*)cvClone(img1);



	ROI_mat =cvarrToMat(img3);

	Rect myROI(100,160,160,180);  //100, 160의 좌표에 160*180크기의 네모 그리기

	Mat crop =ROI_mat(myROI);

	IplImage img2=crop;



//-------------------------------------------------------------img2(=ROI)에 대한 정보출력-----------------------

printf("origin =%d\n", img2.origin);

printf("width =%d\n", img2.width);

printf("height=%d\n\n", img2.height);



//------------------------------------------------------------------img3에 대한 정보 출력-----------------------------

data=(uchar*)img3->imageData;

printf("number of channels = %d\n", img3->nChannels);

printf("origin =%d\n", img3->origin);

printf("width =%d\n", img3->width);

printf("height=%d\n", img3->height);

printf("widthStep = %dbytes(width x channels).\n", img3->widthStep);

printf("depth =%d bits\n", img3->depth);

printf("imageSize =%d bytes (width x height x channels) \n", img3->imageSize);

printf("imageData = %d\n", data[100]);



cvShowImage("Origin", img1);

cvShowImage("ROI", &img2);



cvWaitKey(0);



cvReleaseImage(&img1);

//cvReleaseImage(&img2);



cvDestroyWindow("origin");

cvDestroyWindow("ROI");



}


이렇게 되면 우리는 아래 사진과 같은 결과 값을 얻을 수 있어요.

원래 이미지 + ROI 이미지 + 영상의 컬러 정보 3개의 창이 뜰겁니다.

 

원본 사진은 결과 값에서 생략했지요 ^^

<ROI와 영상 정보 결과 값>