C++ 使用opencv读取16位tif
我正在尝试使用opencv 2.4.3读取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
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(我认为您可以重用缓冲区,无需昂贵的复制)。我希望有帮助!