It works in C++ :
Mat img = imread("g:/lib/opencv/samples/data/lena.jpg");
imwrite("test.webp", img);
fstream fs;
fs.open("test.webp", ios::binary + ios::in);
fs.seekg(0, fs.end);
int length = fs.tellg();
fs.seekg(0, fs.beg);
std::vector<uchar> buffer(length);
fs.read((char*)&buffer[0], length);
fs.close();
vector<uchar> tmp;
Mat img2= imdecode(buffer, IMREAD_UNCHANGED);
imshow("e",img2 );
waitKey();
In python
import numpy as np
import cv2 as cv
_bytes = open('test.webp', 'rb').read()
buf = np.frombuffer(_bytes, np.uint8)
img = cv.imdecode(buf, cv.IMREAD_UNCHANGED)
error is
imdecode_(''): can't read data: OpenCV(4.1.0-pre) G:\Lib\opencv\modules\imgcodecs\src\grfmt_webp.cpp:164: error: (-215:Assertion failed) data.rows == 1 in function 'cv::WebPDecoder::readData'
I think python binding is wrong... np.uint8 is convert in char and it should be uchar post an issue
check print(cv2.getBuildInformation()) if webp is available
I checked. Webp is there. B.t.w. What does "(ver encoder: 0x020e)" means? No webp decoder?
And when I use cv2.imencode for webp, everything is fine.
And when I directly read from file, it is also fine: