QImage 转opencv
时间: 2023-07-07 20:35:06 浏览: 182
将 `QImage` 转为 `cv::Mat` 可以通过以下步骤实现:
1. 将 `QImage` 转为 RGB 彩色图像:
```cpp
QImage qimg; // 假设已经加载了一张 QImage 图像
cv::Mat img(qimg.height(), qimg.width(), CV_8UC3, qimg.bits(), qimg.bytesPerLine());
cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
```
这里我们首先创建一个 `cv::Mat` 对象 `img`,大小与 `QImage` 相同,像素数据指针指向 `QImage` 的 `bits()`,并且使用 `QImage` 的 `bytesPerLine()` 作为步长。然后使用 `cv::cvtColor()` 函数将 `img` 从 BGR 格式转换为 RGB 格式。
2. 如果需要将 RGB 彩色图像转为灰度图像,可以使用以下代码:
```cpp
cv::Mat gray_img;
cv::cvtColor(img, gray_img, cv::COLOR_RGB2GRAY);
```
这里我们创建一个新的 `cv::Mat` 对象 `gray_img`,并使用 `cv::cvtColor()` 函数将 `img` 从 RGB 格式转换为灰度格式。
注意:在将 `QImage` 转为 `cv::Mat` 时,需要保证 `QImage` 的格式为 `QImage::Format_RGB888` 或 `QImage::Format_ARGB32`。如果 `QImage` 的格式为其他值,则需要先将其转为这两种格式再进行转换。
阅读全文