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의 일부 또는 모든 값을 표시해보십시오.
또한 스택 오버플로는 질문에 단 하나의 질문 만있는 경우 가장 효과적입니다. 질문이 여러 개인 경우 하나 이상의 유효한 답을 얻을 수 있지만 그 중 하나만 수락 할 수 있습니다.
'imshow' 다음에'waitKey'를 호출했는지 확인하십시오. 'waitKey'를 생략하면 아무것도 나타나지 않는 한 가지 이유가됩니다. – SSteve
나는 waitKey를 사용했고 창은 비어 있었지만 공백이었다. – LeOpArD
"화면에 아무 것도 나타나지 않았다"고해서는 안됩니다. 그것은 "화면에 빈 창이 나타납니다"와 다릅니다. 질문에 대한 세부 정보가 많을수록 도움이되는 답을 얻을 수있는 가능성이 높아집니다. – SSteve