OpenCV에서 다시 매핑 기능을 사용하려고합니다. 나는 STMap을 가지고 있기 때문에 x
값은 Red 채널에 있고 y
값은 Green 채널에 있습니다.채널을 분할 할 때 OpenCV - 오류가 발생했습니다.
내가 매핑 할 내 원본 이미지를로드하고있어, 그리고 STMAP는 :
Mat bgr[3]; //destination array
split(image3,bgr);//split source
bgr[0].convertTo(bgr[0],CV_32FC1);
bgr[1].convertTo(bgr[1],CV_32FC1);
bgr[2].convertTo(bgr[2],CV_32FC1);
Mat dst;
:
다음
Mat image3= imread("stmap.tif", CV_32FC1);
Mat image4= imread("source.tif", CV_LOAD_IMAGE_UNCHANGED);
내가 내 STMAP에서 빨간색과 녹색 것들을 얻을 수있는 채널을 분할
그리고 마지막으로, 매핑 부 그러나
remap(image4, dst,bgr[2],bgr[1],INTER_LINEAR,BORDER_CONSTANT,Scalar(0,0,0));
, 내가 dst
표시 매트, 모두 검은 색이야. 내가 좋아하는 콘솔에 일부 값을 인쇄하려고 :
cout << bgr[2].at<float>(1000,300);
하지만 그들은 모두 0입니다. 나는 bgr[1]
과 bgr[2]
을 표시했으며 모두 검은 색이 아닙니다. 그레이 스케일 그래디언트입니다.
그래서 문제가 될 수 있습니까?
감사합니다.
편집 :
나는 내가이의 .jpeg 파일과 명령을 사용 할 때마다 것으로 나타났습니다 :
cout << bgr2[2].at<float>(1000,300);
그것은 0.1828510
처럼 나에게 뭔가를 줄 것입니다하지만 난이 프로그램을 실행할 때 동일한 명령을 32 비트 .tif와 함께 사용하면 다음과 같이 표시됩니다.
1.04984e-320
편집 2 :
convertMaps()
기능은 어떻게 사용해야합니까?
이
내가 시도하고 작동하지 않았다 무엇 : 또한Mat image3= imread("STMap.jpg");
Mat image4= imread("image.jpg");
Mat bgr[3];
split(image3,bgr);
Mat map_x, map_y;
map_x.create(image.size(), CV_32FC1);
map_y.create(image.size(), CV_32FC1);
convertMaps(bgr[2], bgr[1], map_x, map_y, CV_32FC1);
, 내가 convertTo()
을 사용했을 때
bgr[2].convertTo(red_channel, CV_32FC1, 1/255.0)
bgr[2]
가 올바르게 표시
red_channel
은 0.0에서 1.0 사이의 값을 모두 가지고 있습니다.
'convertTo()'를 호출하지 않아도 동일한 결과를 얻을 수 있습니다. 32 비트 .tif STMap 및 해당 32 비트 .tif를 사용하려면 어떻게'remap() '을 사용합니까? – YaronGh
'convertTo()'가 없으면 작동하지 않는 것은 당연합니다. – ypnos
내 데이터 유형이 일종의 것이고 0.0-1.0 범위로 "클램프"하려고 시도하는 이유는 무엇일까? CV_32FC1 유형이므로 'remap()'에 의해 허용됩니다. 기능? – YaronGh