C++中使用opencv读取.exr文件

因为最近用到了有些数据库,里面的深度图片是.exr后缀的,但是在使用opencv读取的时候,发现imread读取的数据始终都是空的,甚是纳闷,网上查询使用opencv读取exr文件的资料也大多是基于python的,但是我使用是c++,没啥帮助,于是自己研究了一下。

首先,写个简单的demo来读取.exr图片,以及查看当前的opencv支不支持exr格式的读取。注:默认编译的opencv是不支持的。

首先cpp文件:

#include <iostream>
#include <chrono>
using namespace std;

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main ( int argc, char** argv )
{
      // 读取 指定的图像
        cv::Mat image;
	image = cv::imread ("/home/wei/Documents/dataset/klg/car4-full/depth_original/Depth0003.exr",cv::IMREAD_UNCHANGED); // cv::imread 函数读取指定路径下的图像
	// 判断图像文件是否正确读取
        cerr << cv::getBuildInformation();
	if ( image.data == nullptr ) // 数据不存在,可能是文件不存在
	{
	 cerr<<"文件不存在."<<endl;
	 return 0;
	}

	// 文件顺利读取, 首先输出一些基本信息
	cout<<"图像宽为"<<image.cols<<",高为"<<image.rows<<",通道数为"<<image.channels()<<endl;
	cv::imshow ( "image", image ); // 用 cv::imshow 显示图像
	cv::waitKey ( 0 ); // 暂停程序,等待一个按键输入
       // 其他图像操作请参见 OpenCV 官方文档,查询每个函数的调用方法。
        cv::destroyAllWindows();
       return 0;

}

然后cmakeLists.txt文件

set( CMAKE_CXX_FLAGS "-std=c++11" )# 寻找 OpenCV 库
find_package( OpenCV REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )

add_executable( imageBasics readPic.cpp )
# 链接 OpenCV 库
target_link_libraries( imageBasics ${OpenCV_LIBS} )

然后编译,运行,可以得到下面类似的输出:

可以发现指出的图片类型里面没有OpenEXR,而且 也输出:文件不存在。

因此,解决办法是重新编译opencv,编译的时候加上参数:

-DWITH_OPENEXR=ON

使得opencv支持.exr格式,然后重新执行,得到: 

发现支持了OpenEXR了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值