2014-07-16 5 views
0

블렌더에서 생성 된 깊이 맵을로드하려고합니다. enter image description hereDepthmap을로드하면 잘못된 값이 생성됩니다.

OpenCV는 이미지를로드하고 이미지에서 하나의 테스트 값을 표시합니다. 깊이로드 - 1 - 255 0

TestValue: 31110 

포토샵 I는 숫자 형식 0 필요 121

의 계조 값을 나타낸다 :

cv::Mat depthMap = cv::imread(path, CV_LOAD_IMAGE_ANYDEPTH); 
std::cout << "TestValue: " << depthMap.at<short>(0,0) << std::endl; 

++ C의 출력은 다음과 같은 값 테스트 값이 121 또는 0.4745가되도록 맵을 만듭니다. 깊이 맵을 정규화하면 0 - 1의 값을 갖지만 깊이 맵에서 가장 높은 값은 255가 아닌 121입니다.

내가 뭘 잘못하고 있는지 아이디어가 있습니까?

+0

depthMap.type()은 무엇을 제공합니까? – berak

+0

그것은 2라고 말하며 채널 번호는 1 – glethien

+0

입니다. 서명되지 않은 짧은 코드이므로 depthMap.at (0,0)'으로 액세스해야합니다. (포토샵은 자동으로 uchar [0-255 ]) – berak

답변

2

데이터를 으로 축약하고 (부호가있는 짧은 int, "최소 16 비트 이상")으로 읽습니다. 대신 unsigned short를 사용

std::cout << "TestValue: " << depthMap.at<unsigned short>(0,0) << std::endl; 

당신은뿐만 아니라 ushort을 시도 할 수 있습니다.

한편, 0-255 사이의 값을 원하면 CV_LOAD_IMAGE_ANYDEPTH 플래그를 사용하지 마십시오. 이미지를 1 채널로 읽거나 그레이 스케일로 변환하십시오.

EDITED : 주석에서 지적한대로 CV_LOAD_IMAGE_ANYDEPTH 플래그로 읽는 동안 액세스에 올바른 유형 인 unsigned short (int)을 사용해야합니다. 회색 음영 이미지를 읽거나 변환하는 경우 unsigned char 액세스를 대신 사용할 수 있습니다.

+0

코멘트를보세요. – berak

+0

완료. 문제가 무엇입니까? –

+0

유형이 잘못되었습니다. ushort, uchar가 아님 – berak

관련 문제