根据你提供的代码输入后报错了error C2664: “cv::UMat::UMat(cv::UMat &&)”: 无法将参数 4 从“char *”转换为“cv::UMatUsageFlags”
时间: 2024-01-06 09:03:19 浏览: 28
非常抱歉,我之前的回答有误。在使用UMat时,我们不需要手动分配内存给指针,并且构造函数的参数也需要做相应的修改。
以下是修正后的代码:
```cpp
QElapsedTimer timer;
timer.start();
float scale = 0.25; // default 8bits
unsigned int maxPixel = 0;
char *mpImgRaw;
char *mpRGBBuffer;
cv::Mat img_raw8(imgRawH, imgRawW, CV_8UC1, mpImgRaw); // 使用指针创建Mat
cv::UMat img_rawpixel(img_raw8.size(), CV_16SC1); // 使用UMat
// 计算转换比率
for (int i = 0; i < mBitDepth; i++)
maxPixel = maxPixel | (1 << i);
cv::convertScaleAbs(img_rawpixel, img_raw8, 255.0 / maxPixel); // RAW8 --> 255
cv::UMat rgb;
cv::cvtColor(img_raw8, rgb, cv::COLOR_BayerGR2RGB);
qDebug() << "preProcess time:" << timer.elapsed() << "ms";
memcpy(mpRGBBuffer, rgb.getMat(cv::ACCESS_READ).data, rgb.cols * rgb.rows * 3); // TODO:待优化,深copy了,不做线程间为Crash
QImage image((uchar *)mpRGBBuffer, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888);
rimg = image;
```
请注意,我们使用指针`mpImgRaw`来创建`img_raw8`,并将其传递给`cv::Mat`构造函数。然后,我们使用`cv::UMat img_rawpixel(img_raw8.size(), CV_16SC1)`来创建UMat对象,并在之后的转换中使用它。最后,我们将UMat的数据拷贝到`mpRGBBuffer`中,与之前的代码保持一致。
希望这次能够帮助你解决问题。如果还有任何疑问,请随时提问。