OpenCV imread读取jpg图片抛出0xC0000409错误如何解决?
OpenCV读取JPG格式图片报错问题说明与解决方案
测试代码
以下是读取本地图片的测试代码:
#include <iostream> #include <opencv2/opencv.hpp> int main (int argc, char** argv) { auto path = "C:/Users/huhua/Pictures/11.jpg"; auto img = cv::imread(path); if (img.empty()) { std::cout << "is empty" << std::endl; return 1; } cv::imshow("demo", img); cv::waitKey(0); return 0; }
问题现象
- 已确认测试路径下的
11.jpg文件真实存在,将路径替换为同目录下的11.bmp文件时程序可正常运行、图片正常加载 - 调试定位到错误抛出位置为
libjpeg-turbo/src/jdatasr.c的fill_input_buffer函数,相关代码如下:
fill_input_buffer(j_decompress_ptr cinfo) { my_src_ptr src = (my_src_ptr)cinfo->src; size_t nbytes; // 错误在此处抛出 nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); // 后续代码省略 }
问题根因与修复方案
该问题并非libjpeg相关组件本身的缺陷导致,根源为项目CMake配置不符合规则:CMAKE_TOOLCHAIN_PATH的配置项被放在了project(xxx)指令之后,而CMake要求CMAKE_TOOLCHAIN_PATH必须在project指令之前配置。配置顺序错误会导致依赖的vcpkg库链接异常,间接引发JPG解码环节的文件读取错误。
将CMAKE_TOOLCHAIN_PATH的配置调整到project指令之前后,问题即可修复。
内容的提问来源于stack exchange,提问作者user3875388
相关产品推荐
相关产品推荐

