반응형

 

참고

http://goo.gl/Q0It8

 

  


지난번에 작성한 OpenCV 튜토리얼 – Mat (기본 이미지 컨테이너) 1/2를 이어서 작성.

http://webnautes.tistory.com/584

 

 

Mat 객체 생성하는 방법

1.Mat() 생성자

 

2x2, 8bit, unsigned char, 1 channel

 

3x3, 8bit, unsigned char, 1 channel

 

2x2, 8bit, unsigned char, 3 channel

 

2.C/C++ 배열 과 생성자 이용

 

1x2, 8bit, unsigned char, 1 channel

 

2x1, 8bit, unsigned char, 1 channel

 

2x2, 8bit, unsigned char, 1 channel

 

 

3.create()함수

만들고 나서 사용 전에 초기화 시켜서 사용해야 할 듯 하다.

 

4.MATLAB 스타일

 

 

 

5.콤마로 구분된 값들을 이용하여 초기화

 

6.이미 존재하는 Mat객체를 복사해서 새로운 헤더 생성

반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. Favicon of https://simmmmmk.tistory.com BlogIcon 두룹두두 2021.04.09 08:36 신고

    안녕하세요. Mat의 픽셀값을 직접 출력하는 과정에서 문제가 발생하여 질문드립니다..

    아래와 같이 int형 타입의 Mat을 생성하고
    여기에 어떤 조건(src라는 어떤 이미지를 불러와서 src의 픽셀값이 0초과되는 값인지 아닌지)에 따라
    0 또는 300의 픽셀값을 임의로 집어넣는 코드를 작성했습니다.

    Mat mask = Mat(Size(55,55), CV_32S);

    for(int y=0; y<mask.rows; y++){
    for(int x=0; x<mask.cols; x++){
    int value = src.at<int>(y,x);

    if(value > 0)
    mask.at<int>(y,x) = 300;
    else
    mask.at<int>(y,x) = 0;
    }
    }

    여기까지 값을 대입하는건 잘 된 것 같은데요. 값이 잘 들어갔는지 확인하고자 픽셀에 직접 접근해서 값을 printf로 출력해보면 이상한 값들이 나옵니다..ㅠ 300또는 0의 값이 나와야할텐데. 확실히 300이 대입되었을 위치의 픽셀값이 0 으로 출력되고 300이라는 값이 하나도 나오지 않습니다...ㅠㅜ

    mat.data[y * mask.cols + x] 방법으로 접근해서 픽셀값을 대입해도 출력해보면 제가 대입한 값이 나오지 않네요ㅠㅜ

    이와 같은 현상 보신 적 있으신가요..? 참고로 우분투 환경 사용중입니다. 혹시 Mat에 접근해서 픽셀값을 직접 출력하는 것이 좋은 방법은 아닌걸까요...?
    자료형의 출력에 관한 문제같기도 한데 어떻게 해결해야할지 막막하여 질문남깁니다.ㅜㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2021.04.09 08:46 신고

      원본이미지가 그레이스케일 또는 바이너리 이미지인가요? src.at<int>가 아니라 src.at<unsigned char>이 되어야 할거 같은데 혹시 원본 이미지가 int 타입인가요?

    • Favicon of https://simmmmmk.tistory.com BlogIcon 두룹두두 2021.04.09 10:17 신고

      답글 감사합니다ㅜ
      src는 그레이스케일로 불러온 이미지를 Mat::convertTo() 함수를 통해서 CV_32S 형으로 변환해줬습니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2021.04.09 10:22 신고

      변환과정에서 값의 범위가 바뀐게 아닌가 싶기도 하네요. 그레이스케일 이미지로 해보세요. 범위는 0~255 사이내에서

    • Favicon of https://simmmmmk.tistory.com BlogIcon 두룹두두 2021.04.16 16:19 신고

      안녕하세요. 문제가 해결되어 늦었지만 댓글 남깁니다. 원인은 아직도 정확히 모르겠어요ㅜ 근데
      printf("%*d ", 6, mat.at<int>(r, c));

      이렇게 printf 로 뿌려주니 잘 출력됩니다.;;;

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2021.04.16 16:25 신고

      글 남겨주셔서 감사합니다. 해결하신거 축하드려요. 기존에 하신거랑 별차이 없어보이긴합니다.

+ Recent posts