C++ 使用opencv读取16位tif

C++ 使用opencv读取16位tif,c++,opencv,C++,Opencv,我正在尝试使用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("imag

我正在尝试使用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位图像的正确方法是什么?

试试:

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);

你能分享原始图像吗?@herohuyongtao不幸的是,我不能,这是一个授权图像,不管怎样,它是1.5 Gb。我也尝试过,但结果相同。我不希望我的用户转换他们的图像。不过还是谢谢你的帮助。你找到答案了吗?@kishensurajP,那是三年前的事了!无论如何,如果我没记错的话,我使用GDAL读取了tifs,并由此创建了一个cv::Mat(我认为您可以重用缓冲区,无需昂贵的复制)。我希望有帮助!