1. Mat to UMat


Mat.ConvertTo(UMat, DepthType)



2. UMat to Mat


Mat = UMat.ToMat(AccessType);



Change_UMat2Mat_Mat2UMat.zip


'OpenCV > Emgu' 카테고리의 다른 글

[Emgu] Mat to UMat && UMat to Mat  (0) 2017.02.23



#include <opencv2/opencv.hpp>

using namespace cv;


#include <iostream>

using namespace std;


#define STR_WINDOW "Window"


void mouseEvent(int evt, int x, int y, int flags, void *param){

Mat *img = (Mat *)param;

if ( evt == CV_EVENT_LBUTTONDOWN ){

printf("(%04d, %04d) : %03d, %03d, %03d\n", x, y,

(int)(*img).at<Vec3b>(y,x)[0],

(int)(*img).at<Vec3b>(y,x)[1],

(int)(*img).at<Vec3b>(y,x)[2]);

}

}


int main(){

Mat image = imread( your image path );

if ( image.empty() ){

cout << "Error loading the image" <<endl;

return -1;

}


namedWindow(STR_WINDOW, 1);

setMouseCallback(STR_WINDOW, mouseEvent, &image);

imshow(STR_WINDOW, image);


waitKey(0);

return 0;

}


<< result >>

#include <opencv\cv.h>

#include <opencv\highgui.h>


using namespace cv;

using namespace std;


int main(){


// 이미지 불러오기 (read image).

Mat image = imread("image.jpg");


// 에러 처리 (error).

if ( !image.data ) {

return -1;

}


// 관심영역 설정 (set ROI (X, Y, W, H)).

Rect rect(100, 30, 150, 300);


// 관심영역 자르기 (Crop ROI).

Mat subImage = image(rect);


// show

imshow("image", subImage);


waitKey(0);


return 0;

}



  1. 맹주호 2018.08.16 21:52 신고

    이 부분을 안드로이드 스튜디오에서 하고있는데 어디에 추가하면되는지 알수있나요??

    그리고

    for (int i = 0; i < faces.size(); i++) {
    double real_facesize_x = faces[i].x / resizeRatio;
    double real_facesize_y = faces[i].y / resizeRatio;
    double real_facesize_width = faces[i].width / resizeRatio;
    double real_facesize_height = faces[i].height / resizeRatio;

    Point center( real_facesize_x + real_facesize_width / 2, real_facesize_y + real_facesize_height/2);
    ellipse(img_result, center, Size( real_facesize_width / 2, real_facesize_height / 2), 0, 0, 360,
    Scalar(255, 0, 255), 30, 8, 0);

    사진에서 얼굴부분을 찾아서 이부분만 짤라내고 싶은데 어떻게 해야하나요??

#include <opencv2/opencv.hpp>

using namespace cv;


int main(int argc, char **argv){

char *imageName = argv[1];


Mat image;

image = imread(imageName, 1);    // 이미지 불러오기.


// 에러 처리.

if ( argc!= 2 || !image.data ){

printf(" No image data \n ");

return -1;

}


// 불러온 이미지와 구분하기 위하여 흑백 이미지로 변환.

Mat grayImage;

cvtColor( image, grayImage, COLOR_BGR2GRAY );


// 파일명 "GrayImage.jpg"로 저장.

imwrite( "GrayImage.jpg", grayImage );


return 0;

}


이와같이 사용하시면 이미지 불러오기와 저장을 할 수 있습니다.

※※※※※※ 자세한 설명을 해드릴만큼 알지 못하며, Ubuntu에서 설치를 하고 작동하는것을 확인하는 단계입니다. 자세한 설명을 원하시면 OpenCV 공식 사이트에서 참조 하시기 바랍니다. ※※※※※※




  1. OpenCV install
    1. http://stackoverflow.com/questions/13904117/compiling-and-linking-opencv-in-ubuntu-12-04 에서 참조하였음.
    2.  sudo apt-get install libopencv-dev  
      1. sudo : Ubuntu에서 관리자 권한을 얻음. ( 암호를 알고 있어야 함.)
      2. apt-get install : 필요한 프로그램(libopencv-dev)을 설치하겠다.
      3. libopencv-dev : 설치할려고하는 파일 이름.
  2. 설치를 완료하였습니다.
  3. 이제 설치한 파일을 실행하겠습니다.
    1. g++이 설치가 안되어 있을 경우 설치한다.
      1.  sudo apt-get install g++  : 관리자 권한을 얻어서 g++을 설치한다.
    1. 필요한 예제 파일을 다운 받는다.
      1.  wget http://linux-projects.org/downloads/examples/opencv_test.cpp 
    2. 빌드 한다.
      1. http://elinux.org/Jetson/Installing_OpenCV 에서 참조하였음.
      2.  g++ opencv_test.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -o opencv_test  : 이 예제 프로그램에 한하여 빌드 옵션을 -lopencv_core -lopencv_imgproc -lopencv_highgui 를 사용하였으므로, 사용하는 프로그램에 따라 옵션을 달리 할경우가 많이 발생함.
    3. 프로그램을실행한다.
      1. 참고로 이 예제는 카메라를 필요로합니다 카메라를 연결하시고 사용하세요.
      2.  ./opencv_test 




http://karytech.blogspot.kr/2012/05/opencv-24-on-ubuntu-1204.html


을 따라하자. 


설치시 필요한 것들은 여기에 포함되어있다. ( 'here'을 유심히 보면 된다. )

더보기


stereo matching을 확인하면서, C source style은 track bar를 쉽게 사용할 수 있다.


하지만 C++ source style을 적용하면 문제 되는게 있다. 일단 아래의 source를 보자.

source 1


위와 같은 소스를 실행하면, error C3867: 'BM::OnPreFilterSize' : 함수 호출에 인수 목록이 없습니다. '&BM::OnPreFilterSize'을 사용하여 멤버에 대한 포인터를 만드십시오. 라는 error메세지가 나올것이다. 또한 cvCreateBrackbar에서 OnPreFilterSize의 형은 CvTrackbarCallback라는 것을 명심하자.


이에 해결 방법은 다음과 같이 선언하면 된다.

source 2

위의 source와 같이 추가하면, 위에 언급한 'error C3867'문제를 해결할 수 있다.


여기서, 추가적으로 OnPreFilterSize에서 class의 멤버 변수를 변경 할 수 없다.


여러가지 방법이 있겠지만, 내가 오늘 알게 된 것은 다음과 같다.

source 3

위와 같이 추가적으로 선언해주면, static function에서도 멤버 변수를 변경 할 수 있다.



Tip



+ Recent posts