【发布时间】:2021-04-20 05:28:42
【问题描述】:
我正在尝试打开一个 yuv 格式的图像。我可以用 rawpixels.net 打开它并在设置以下后显示它
width:1920
height:1080
predefined format: yuv420 (nv12)
pixel format yuv
但是如果我用下面的代码用opencv打开我就打不开。
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
int main() {
std::cout << "OpenCV version: " << CV_VERSION << std::endl;
cv::Mat image = cv::imread("camera_capture_256_2020_10_07_11_11_02.yuv");
if (image.empty() == true) {
std::cout << "image empty"<< std::endl;
return 0;
}
cv::imshow("opencv_logo", image);
cv::waitKey(0);
return 0;
}
程序打印为“图像为空”。
我很疑惑为什么用opencv打不开文件。
样本图片在here找到。
用 rawpixels.net 打开的 yuv 图像是这样的。
谢谢,
【问题讨论】:
-
是的。这里link
-
我不知道 OpenCV 能够编写这样的 YUV 文件 -
cv2.imwrite()的文档中没有提到它。我认为你需要做YUV = cvtColor(...BGR2YUV...)并使用标准 Pythonwrite(YUV.tobytes()) -
如果你的 YUV 图像是 1920x1080 和
nv12格式,它应该是 1920*1080*1.5 字节,因为nv12是 12 位/像素。那是 3110400 字节,但你的文件是 8355840 字节,还是 2.7 倍太大? -
@enhzflep 很有趣。事实上,当我用 rawpixels.net 打开时,会看到一条绿线,这可能是神秘的标题。
-
进行这种开发的一个技巧是从超清晰的数据开始。一个正方形的盒子,尺寸、颜色等都完美匹配。当我做类似的事情从损坏的 CDROM 中提取数据时,我在整个磁盘上刻录了一个图案,然后用一台钻孔机在上面钻了一个大洞。
标签: c++ image opencv yuv libyuv