使用OpenCV读取16位TIF文件

4
我正在尝试使用opencv 2.4.3读取16位彩色TIF文件。但问题是我无法得到令人满意的结果,只能得到一系列黑色和灰色线条的图像。我已经尝试了不同的读取图像方法:
cv::Mat cvimage = cv::imread(imageFile, CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYDEPTH);
cv::Mat cvimage = cv::imread(imageFile, CV_LOAD_IMAGE_UNCHANGED);

cv::imshow("image", cvimage);

cvimage的类型是CV_16UC3,与预期相符。

使用OpenCV正确读取16位图像的方法是什么?


你能分享原始图像吗? - herohuyongtao
@herohuyongtao 很遗憾我不能提供,这是一张有版权的图片,并且它有1.5 Gb大小。 - undu
1个回答

3

尝试:

cv::Mat cvimage = cv::imread(imageFile
                             , CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);

如果这种方法不起作用,您可以首先将其转换为PNG,因为OpenCV可以正确读取甚至写入16位的PNG文件。您可以将TIFF转换为PNG而不会损失任何信息。
cv::Mat cvimage = cv::imread(imageFile, -1);

我也尝试了这个,但结果一样。我宁愿不让我的用户转换他们的图像。无论如何,还是谢谢你的帮助。 - undu
你找到答案了吗? - curio17
3
那是三年前的事了!无论如何,如果我没记错的话,我使用了GDAL来读取tifs,并从中创建了一个cv::Mat(我认为你可以重复使用缓冲区,不需要昂贵的复制)。希望有所帮助! - undu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接