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를 보자.


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


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

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


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


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

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





+ Recent posts