OPENCV读取和存储图片含有中文路径

博客主要围绕OpenCV中imread不能读取中文路径的问题展开。介绍了cv2.imdecode()函数可从内存缓存读取并解码数据成图像格式,用于网络传输数据恢复图像;cv2.imencode()函数能将图片编码成流数据存于内存,用于图像压缩方便网络传输,还提及写入图片时中文路径情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 imread不能读取中文路径的问题

读取图片所在文件夹中含有中文路径:

jpg_file = r'F:\数据集\3.jpg'
img=cv2.imdecode(np.fromfile(jpg_file,dtype=np.uint8),flags=-1)

 cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。
cv2.imencode()函数是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。

#  flags: 标志位, 表示读取数据的格式
#  读取彩色可以设为cv2.IMREAD_COLOR(flags=1),
#  读取灰度图像设为cv2.IMREAD_GRAYSCALE(flags=0),
#  读取原始图像设为cv2.IMREAD_UNCHANGED(flags=-1)。
np.fromfile(jpg_file,dtype=np.uint8)
# 用cv2.imdecode()函数之前先使用np.fromfile进行指定格式的读取

 写入图片所在文件夹含有中文路径:

cv2.imencode('.jpg', rotated_img)[1].tofile(rotated_path + a + '_' + str(angle) + 'd.jpg')
#  rotated_img为图片数据文件,为cv2读取的图片类型
#  rotated_path + a + '_' + str(angle) + 'd.jpg' 这是一个文件路径和名字 
    eg. F:\数据集\shiyan\2_15d.jpg

 

 

 

 

 

 

 

 

 

在C++中,可以使用OpenCV库中的imread函数来读取图像,但是它只支持ASCII字符集的路径。如果路径中包含中文字符,可以尝试以下两种方法。 方法一:使用Unicode编码的路径 可以将中文路径转换为Unicode编码,然后使用wstring类型存储路径,最后使用imread函数读取图像。示例代码如下: ```c++ #include <opencv2/opencv.hpp> #include <iostream> #include <string> using namespace std; using namespace cv; int main() { wstring path = L"D:\\中文路径\\image.jpg"; // 将中文路径转换为Unicode编码 Mat img = imread(string(path.begin(), path.end())); // 将wstring类型转换为string类型 if (img.empty()) { cout << "Failed to read image!" << endl; return -1; } imshow("Image", img); waitKey(0); return 0; } ``` 方法二:使用boost库 可以使用boost库中的filesystem模块来处理中文路径。首先需要安装boost库,并将boost的头文件库文件链接到工程中。示例代码如下: ```c++ #include <opencv2/opencv.hpp> #include <iostream> #include <string> #include <boost/filesystem.hpp> using namespace std; using namespace cv; using namespace boost::filesystem; int main() { string path = "D:/中文路径/image.jpg"; path p(path); // 将路径转换为boost库中的path类型 Mat img = imread(p.string()); if (img.empty()) { cout << "Failed to read image!" << endl; return -1; } imshow("Image", img); waitKey(0); return 0; } ``` 这两种方法都可以读取中文路径的图像。需要注意的是,在Windows操作系统中,路径分隔符应该使用反斜杠`\`而不是正斜杠`/`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值