我需要使用Unicode名稱讀取圖像文件,但openCV函數imread的圖像名稱參數僅支持字符串。我怎樣才能保存我的Unicode路徑字符串對象。有沒有解決方案?使用imread打開unicode名稱的圖像文件
1
A
回答
2
您可以:
- 打開與
ifstream
文件, - 讀這一切在
std::vector<uchar>
, - 與
cv::imdecode
解碼。
請參見下面的例子加載到img2
使用ifstream
一個Unicode文件名的圖像:
#include <opencv2\opencv.hpp>
#include <vector>
#include <fstream>
using namespace cv;
using namespace std;
int main()
{
// This doesn't work with Unicode characters
Mat img = imread("D:\\SO\\img\\æbärnɃ.jpg");
if (img.empty()) {
cout << "Doesn't work with Unicode filenames\n";
}
else {
cout << "Work with Unicode filenames\n";
imshow("Unicode with imread", img);
}
// This WORKS with Unicode characters
// This is a wide string!!!
wstring name = L"D:\\SO\\img\\æbärnɃ.jpg";
// Open the file with Unicode name
ifstream f(name, iostream::binary);
// Get its size
filebuf* pbuf = f.rdbuf();
size_t size = pbuf->pubseekoff(0, f.end, f.in);
pbuf->pubseekpos(0, f.in);
// Put it in a vector
vector<uchar> buffer(size);
pbuf->sgetn((char*)buffer.data(), size);
// Decode the vector
Mat img2 = imdecode(buffer, IMREAD_COLOR);
if (img2.empty()) {
cout << "Doesn't work with Unicode filenames\n";
}
else {
cout << "Work with Unicode filenames\n";
imshow("Unicode with fstream", img2);
}
waitKey();
return 0;
}
如果你使用Qt,您可以用QFile
做多這一點方便和QString
,因爲QString
本地處理Unicode字符,而QFile
提供了一種簡單的方法來處理文件大小:
QString name = "path/to/unicode_img";
QFile file(name);
qint64 sz = file.size();
std::vector<uchar> buf(sz);
file.read((char*)buf.data(), sz);
cv::Mat3b img = cv::imdecode(buf, cv::IMREAD_COLOR);
爲了完整起見,here你可以看到如何在Python做這個
相關問題
- 1. 使用更改名稱打開文件
- 2. 打開圖像和文本文件具有相同的名稱
- 3. Opencv使用imread和QString文件名向量來加載圖像
- 4. 使用unicode名稱打開輸入文件流,但使用ASCII數據
- 5. 如何打開一個具有unicode符號名稱的文件
- 6. 如何在Windows上使用UNICODE文件名打開文件?
- 7. 用TagLib在文件名中用Unicode字符打開文件
- 8. 用輸入名稱打開文件
- 9. OpenCV蟒蛇沒有用imread打開圖像
- 10. 如何使用python中的中文名稱打開文件
- 11. WPF TabItem打開文件的名稱
- 12. 用UNICODE名稱搜索文件
- 13. 使用Java中的參數通過名稱打開文件
- 14. 以分數名稱打開文件
- 15. 打開文件時不知道名稱
- 16. 基於Tab名稱打開文件?
- 17. 使用csv文件複製/重命名utf8名稱的圖像
- 18. 如何在名稱中包含unicode字符的PHP中打開文件?
- 19. unicode中上傳的文件的名稱
- 20. 使用c#打開使用hfs文件系統的圖像
- 21. Python的打開文件的Unicode錯誤
- 22. 試圖打開文件的名稱錯誤
- 23. 使用ImageMagick的文件名引用時出現「無法打開圖像」錯誤
- 24. 用文件夾中的實際圖像替換圖像名稱?
- 25. Matlab正在用imread打開一個帶有不同值的pgm圖像
- 26. 試圖用Unicode名稱刪除文件夾
- 27. 通過點擊pdf文件名稱使用java打開JTable中的PDF文件
- 28. 試圖更改名稱時使用php上傳圖像文件
- 29. 使用Excel打開文件的最新版本(使用不同的名稱)
- 30. 打開%%文件名
有可能是一個合適的解決方案,但作爲一種解決方法,你可以創建一個純ASCII文件名指向其Unicode文件名以外的符號鏈接OpenCV讓OpenCV在操作系統級別索引外部時處理它們。這就是'ln -s UnicodeName.jpg ASCIIName.jpg',然後用你的程序處理'ASCIIName.jpg'。 –