2012-12-11 9 views
5

나는이 질문에 대한 답을 찾을 수 없습니다 :OpenCV에서 16 비트 회색조로 작업하는 방법은 무엇입니까?

  1. 내가 16 비트 그레이 스케일 사진을 표시 할 OpenCV의를 사용할 수 있습니까? 나는 imshow()을 시도했지만 OpenCV가 만든 창에는 아무 것도 나타나지 않았다.

  2. 어떻게하면 16 비트 회색조 그림을 B5G6R5 그림으로 변환 할 수 있습니까? 이 구조를 저장하려면 어떤 매개 변수를 사용하여 cv::Mat을 작성해야합니까? 나는 cv::cvtColor(m_cvTmp, tmp, CV_GRAY2BGR565)을 시도했지만이 기능은 계속 충돌했다. documentation on miscellaneous image transformations은 답을 말해주지 않습니다.

추 신 : 처리하고 싶은 이미지가 이미 메모리에 있습니다.

+0

'imshow' 다음에'waitKey'를 호출했는지 확인하십시오. 'waitKey'를 생략하면 아무것도 나타나지 않는 한 가지 이유가됩니다. – SSteve

+0

나는 waitKey를 사용했고 창은 비어 있었지만 공백이었다. – LeOpArD

+0

"화면에 아무 것도 나타나지 않았다"고해서는 안됩니다. 그것은 "화면에 빈 창이 나타납니다"와 다릅니다. 질문에 대한 세부 정보가 많을수록 도움이되는 답을 얻을 수있는 가능성이 높아집니다. – SSteve

답변

0

1)이을 살펴 봐야합니다.

Mat imageGrey = imread("<image_name>", CV_LOAD_IMAGE_GRAYSCALE); 

2)

Mat imageGrey = imread("<image_name>", CV_LOAD_IMAGE_GRAYSCALE); 
Mat imageBGR; 
cvtColor(imageGrey, imageBGR, CV_GRAY2BGR565); 

이 작동 하는가 : 같은

코드는 것인가?

+0

처리중인 이미지가 이미 다른 lib의 메모리에 있음을 언급하지 마십시오. 내부 표현을 따르고 그 다음에 데이터를 memcpy하는 cv :: Mat를 만들었습니다. – LeOpArD

1

imshow에 대한 설명서에 따르면 16 비트 회색조를 화면에 표시하기 위해 자동으로 8 비트로 조절합니다. 이 프로그램을 다음과 같이 테스트했습니다 :

#include <iostream> 

#include "opencv2/core/core.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 

using namespace std; 

int main(int argc, char *argv[]) { 
    cv::Mat image; 
    image = cv::imread("pic2.jpg"); 

    if (!image.data) { 
     std::cout << "Image file not found\n"; 
     return 1; 
    } 

    cv::cvtColor(image, image, CV_BGR2GRAY); 
    cv::Mat pic16bit; 
    image.convertTo(pic16bit, CV_16U, 255); //convert to 16-bit by multiplying all values by 255 

    // create image window named "asdfasdf" 
    cv::namedWindow("asdfasdf"); 
    // show the image on window 
    cv::imshow("asdfasdf", pic16bit); 
    // wait for key 
    cv::waitKey(0); 

    return 0; 
} 

예상대로 그레이 스케일 이미지를 표시했습니다. 따라서 빈 창을 얻는다면 다른 라이브러리에서 cv :: Mat 로의 변환이 올바르게 작동하지 않는다고 생각할 수 있습니다. 예를 들어, 처음 8 비트에서 16 비트로 변환하려고 시도했을 때 모든 8 비트 값에 255를 곱하는 것을 잊었 기 때문에 완전히 검은 색 이미지를 얻었습니다.

디버깅의 첫 단계로 16 비트 그레이 스케일 cv :: Mat의 일부 또는 모든 값을 표시해보십시오.

또한 스택 오버플로는 질문에 단 하나의 질문 만있는 경우 가장 효과적입니다. 질문이 여러 개인 경우 하나 이상의 유효한 답을 얻을 수 있지만 그 중 하나만 수락 할 수 있습니다.

+0

감사합니다. 나는 다음 번에 내 질문을 분리 할 것이다. – LeOpArD

관련 문제