尝试在C++中使用OpenCV从灰度相机渲染图像.几帧后就挂了
Trying to render image from grayscale camera with OpenCV in C++. Hangs after a few frames
我有一个灰度相机(NOT COLOR),正在尝试渲染图像。我在Raspbian上运行,在Raspberry Pi 2上运行。我已经掌握了一些代码,并将其暴露在最低限度,并取得了一些进展:
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
bool rtn;
// rtn = cap.set(CV_CAP_PROP_FRAME_WIDTH , 752);
// cout << "set to 752:" << rtn << endl;
// rtn = cap.set(CV_CAP_PROP_FRAME_HEIGHT , 480);
// cout << "set to 480:" << rtn << endl;
int count = 1;
Mat edges;
namedWindow("edges",1);
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
cout << "cols:" <<frame.cols << endl;
cout << "rows:" << frame.rows << endl;
cout << "count:" << count++ << endl;
cout << "Channel Count:"<< frame.channels() << endl;
// cvtColor(frame, edges, CV_BGR2GRAY);
imshow("edges", edges);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}.
现在我得到了灰度图像,但它只运行了几帧(2-4帧,不同),然后挂起。有趣的是,如果你等待足够长的时间,有时它会在"选择超时"消息后再扫描几帧。
在运行应用程序之前,我尝试过运行以下程序,但似乎没有帮助:
rmmod uvcvideo
modprobe uvcvideo nodrop=1 timeout=5000
此外,尽管我指定相机分辨率为720x480(根据相机规格),但它报告的帧大小为640x480。
当我取出以下代码时:
cvtColor(frame, edges, CV_BGR2GRAY);
它是有效的,但它不是灰度图像,它是绿色的。请注意,我已经对设置框架宽度和高度进行了注释。
由于您是从相机捕捉帧,因此只要帧准备好,它就会捕捉帧,所以您不需要等待30毫秒,只需1毫秒就足够了,而且在将帧转换为灰色之前,请确保它有3个通道(如RGB或BGR帧)。
顺便说一句,cv::VideoCapture::Set函数可能在某些设备或某些属性上不起作用。要设置图像尺寸,您应该检查相机的可接受尺寸,例如,它可能只接受320x200、640x480、600x800。。。
原来我有电源问题。我增加了pi板的功率(/boot/config.txt中有一个设置可以做到这一点),但这还不够。我添加了一个USB电源分配器,并使用了一个台式电源。
相关文章:
- 帧提取 使用OpenCV的视频文件开头只有几秒钟
- 使用命名管道将图像帧从服务器发送到 C# 客户端C++
- 使用 GTK 将 EGL 图像渲染到帧缓冲区
- 修改思科 openh264 以拍摄图像帧和压缩帧
- 咖啡馆欧几里得损失计算超过图像
- 如何将图像帧相机传递给wasm (C++)中的函数?
- 如何在OpENCV中的图像中找到像素之间的欧几里得距离
- 为什么OpenCV程序捕捉视频帧会在几秒钟后冻结
- 从C++图像帧到客户端浏览器中的 html5 <视频标记
- Haar检测-保存图像的Mat,以便获得并显示前一帧
- 在Qt/QML中的每一帧更新图像时运行时崩溃
- 在visual Studio 2012上使用SDL加载.BMP图像时,它只显示一个帧
- 使用FFmpeg解码视频帧时获取的撕裂图像
- 分层图像作为具有大量层的帧缓冲
- 使用 FLTK & C++:制作适合定义帧内图像的功能
- 不保存任何图像。保存视频帧时
- 如何使用OpenCV或其他图像处理库从RGB数据写入YUV420视频帧
- 用C/C++编写YUV图像帧的问题
- 在循环中使用av_read_frame缓存AVFrames只获得最后几帧
- 尝试在C++中使用OpenCV从灰度相机渲染图像.几帧后就挂了