c++ 将cv::mat bgr 转std::vector<unsigned char> uyvy
时间: 2024-09-22 14:04:03 浏览: 71
在C++中,将`cv::Mat`类型的BGR图像数据转换为`std::vector<unsigned char>`的UYVY格式,可以分为以下几个步骤:
1. 确保你已经包含了必要的库头文件,比如`opencv2/opencv.hpp` 和 `<opencv2/imgcodecs.hpp>`。
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/imgcodecs.hpp>
```
2. 使用`imread`函数读取BGR图像到`cv::Mat`变量bgr中:
```cpp
cv::Mat bgrImage = cv::imread("path_to_your_image.jpg", cv::IMREAD_COLOR);
```
3. 创建一个`std::vector<unsigned char>`来存储UYVY数据。注意UYVY格式的每个像素由两个字节表示,分别对应U和V分量,然后是一个Y分量(如果是4:2:0格式)。所以长度需要是原始BGR图像宽度乘以高度再乘以1.5(对于4:2:0):
```cpp
size_t size = bgrImage.cols * bgrImage.rows * (bgrImage.channels() / 2 + 1); // 注意这里可能需要修改为4:2:0的实际比例
std::vector<unsigned char> uyvyData(size);
```
4. 使用OpenCV的内建函数将BGR图像转换为UYVY格式并复制数据:
```cpp
int yuvSize = bgrImage.elemSize();
uchar* src = static_cast<uchar*>(bgrImage.data);
uchar* dst = &uyvyData[0];
// 如果是4:2:0格式,按行处理:
for (int i = 0; i < bgrImage.rows; ++i) {
for (int j = 0; j < bgrImage.cols / 2; ++j) {
dst[0] = src[(i * bgrImage.step) + j * 3]; // Y
dst[1] = src[(i * bgrImage.step) + (j * 3) + 2]; // U (如果第一个像素是蓝色,则第二像素是U)
dst[2] = src[(i * bgrImage.step) + (j * 3) + 1]; // V
dst += 3;
src += bgrImage.channels(); // 跳过下一个像素的蓝色分量(4:2:0)
}
dst += yuvSize; // 每两行结束后跳过一行的空闲位置
}
// 对于最后一行或最后一列,可能有剩余的数据,可以调整这个循环来适应具体情况
```
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.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)
![](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)