QImage类型的数据怎么转Mat类型
时间: 2024-05-12 16:13:53 浏览: 61
可以使用OpenCV库中的cv::Mat和Qt库中的QImage互相转换。
将QImage转换为cv::Mat:
```cpp
QImage qImage;
// 转换为RGB格式
QImage rgbImage = qImage.convertToFormat(QImage::Format_RGB888);
// 获取图像数据指针
uchar* imageData = rgbImage.bits();
// 创建Mat类型
cv::Mat mat(rgbImage.height(), rgbImage.width(), CV_8UC3, imageData, rgbImage.bytesPerLine());
```
将cv::Mat转换为QImage:
```cpp
cv::Mat mat;
// 创建QImage类型
QImage qImage(mat.cols, mat.rows, QImage::Format_RGB888);
// 获取图像数据指针
uchar* imageData = qImage.bits();
// 拷贝数据
memcpy(imageData, mat.data, mat.total() * mat.elemSize());
// 长度不足时需要填充
if (mat.cols * 3 != qImage.bytesPerLine()) {
for (int i = 1; i < qImage.height(); i++) {
memcpy(imageData + i * qImage.bytesPerLine(), imageData + (i - 1) * qImage.bytesPerLine(), qImage.bytesPerLine());
}
}
```
需要注意的是:
- QImage转换为cv::Mat时需要将QImage转换为RGB格式,因为cv::Mat默认使用BGR格式。
- QImage和cv::Mat的行序不同,需要注意数据拷贝时的顺序。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20250102104920.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)