博客
关于我
OpenCV摄像头读取视频、存取处理后视频的代码流程
阅读量:523 次
发布时间:2019-03-07

本文共 2711 字,大约阅读时间需要 9 分钟。

使用霍夫圆变换检测圆形物体中心的实时应用

一、读取视频源

在本项目中,首先需要从摄像头读取视频流。通过OpenCV库,可以使用VideoCapture类来实现这一点。在代码中,我们使用了以下命令:

VideoCapture capture(1);

二、视频属性获取

为了获取视频的基本属性(如帧数、宽度、高度等),我们可以使用VideoCapture提供的属性获取方法:

int width = capture.get(CV_CAP_PROP_FRAME_WIDTH);int height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);int frameCount = capture.get(CV_CAP_PROP_FRAME_COUNT);int fps = capture.get(CV_CAP_PROP_FPS);

三、视频文件写入

如果需要将捕获的视频流保存到文件中,可以使用VideoWriter类。以下是基本的写入代码结构:

VideoWriter writer;writer.open("output.avi", CV_FOURCC('D', 'I', 'V', 'X'), fps, Size(width, height));

四、实时帧处理

使用while循环来持续读取和处理每一帧视频:

while (true) {    Mat frame;    capture >> frame;    // 转换为灰度图像    Mat gray;    cvtColor(frame, gray, COLOR_BGR2GRAY);    // 应用高斯模糊    GaussianBlur(gray, gray, Size(9, 9), 2, 2);

五、霍夫圆变换实现

在这一步骤中,我们使用霍夫圆变换来检测圆形物体。具体实现如下:

vector
circles;HoughCircles(gray, circles, HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);

六、圆心与轮廓绘制

循环遍历检测到的圆,并绘制它们的圆心和轮廓:

for (size_t i = 0; i < circles.size(); ++i) {    Point center(circles[i][0], circles[i][1]);    int radius = circles[i][2];    circle(frame, center, 3, Scalar(0, 255, 0), -1, 8, 0);    circle(frame, center, radius, Scalar(155, 50, 255), 3, 8, 0);}

七、显示当前帧

使用imshow函数显示当前帧,并使用waitKey函数控制帧显示时间:

imshow("实时视频", frame);waitKey(10);

八、程序退出

当用户按下q键时,程序退出:

if (waitKey(100) & 'q') {    break;}

完整代码示例

#include 
#include
#include
using namespace std;using namespace cv;int main() { VideoCapture capture(1); // 获取视频属性 int width = capture.get(CV_CAP_PROP_FRAME_WIDTH); int height = capture.get(CV_CAP_PROP_FRAME_HEIGHT); int frameCount = capture.get(CV_CAP_PROP_FRAME_COUNT); int fps = capture.get(CV_CAP_PROP_FPS); VideoWriter writer; writer.open("output.avi", CV_FOURCC('D', 'I', 'V', 'X'), fps, Size(width, height)); while (true) { Mat frame; capture >> frame; // 转换为灰度图像 Mat gray; cvtColor(frame, gray, COLOR_BGR2GRAY); // 应用高斯模糊 GaussianBlur(gray, gray, Size(9, 9), 2, 2); // 进行霍夫圆变换 vector
circles; HoughCircles(gray, circles, HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0); // 绘制圆心和轮廓 for (size_t i = 0; i < circles.size(); ++i) { Point center(circles[i][0], circles[i][1]); int radius = circles[i][2]; circle(frame, center, 3, Scalar(0, 255, 0), -1, 8, 0); circle(frame, center, radius, Scalar(155, 50, 255), 3, 8, 0); } // 显示当前帧 imshow("实时视频", frame); if (waitKey(100) & 'q') { break; } } return 0;}

总结

通过以上代码,我们可以实现一个实时检测圆形物体中心的应用程序。该程序利用OpenCV库中的VideoCaptureVideoWriter类来读取和写入视频文件,同时使用HoughCircles函数进行霍夫圆变换,从而快速而准确地检测圆形物体的中心位置。

转载地址:http://dfunz.baihongyu.com/

你可能感兴趣的文章
OceanBase 安装使用详细说明
查看>>
OceanBase详解及如何通过MySQL的lib库进行连接
查看>>
ocp最新题库之052新题带答案整理-36题
查看>>
OCP题库升级,新版的052考试题及答案整理-18
查看>>
OCR:文字识别(最详细教程)
查看>>
OCR使用总结
查看>>
OCR识别:身份证信息加密传输
查看>>
octave错误-error: ‘squareThisNumber‘ undefined near line 1 column 1
查看>>
Octotree Chrome插件离线安装
查看>>
OC中关于给NSString 赋 nil和@""的区别
查看>>
OC字符串方法汇总
查看>>
OC学习6——面相对象的三大特性
查看>>
OC点语法介绍和使用以及@property关键字
查看>>
oc知道经纬度求位置
查看>>
OC高效率52之提供“全能初始化”方法
查看>>
oc--习题
查看>>
oday!POC管理和漏洞扫描小工具
查看>>
ODBC的JAR包和PLSQL
查看>>
ODE网络:一场颠覆RNN的革命即将到来
查看>>
Odin 开源项目教程
查看>>