正所谓有屏幕的地方就有bad apple
既然学了opencv ,那怎么能浪费这一技能呢
视频链接:https://www.bilibili.com/video/av69821573/
下面是代码
#include "opencv2/opencv.hpp"
#include "iostream"
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap; //创建存储视频文件或者设备的对象
cap.open("bad apple.mp4");
Mat frame;//定义一个Mat 变量,用于存储每一帧的图像
int k = -1;
vector<vector<Point>> g_vContours;
vector<Vec4i> g_vHierarchy;
while (1)
{
cap >> frame;
//若视频播放完成,退出循环
if (frame.empty())
{
break;
}
//图片处理
cvtColor(frame, frame, COLOR_BGR2GRAY);//转换成灰度图
threshold(frame, frame, 170, 255, CV_THRESH_BINARY);//图像二值化
//blur(frame, frame, Size(3,3));//均值滤波
Canny(frame, frame, 3,9,3);//运行Canny算子检测边缘
findContours(frame,g_vContours,g_vHierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE);//寻找轮廓
Mat dst;
dst.create(frame.size(), frame.type());//创建于frame同类型和大小的矩阵dst
dst = Scalar::all(255);//将dst内所有元素设置为255
drawContours(dst, g_vContours,-1,Scalar(0),2);//绘制轮廓
imshow("bad apple", dst);//显示当前帧
k = waitKey(30);//延时30ms
if (k == 27) break; //按下退出键:Esc
}
return 0;
}
视频的声音我是用手机播放的,所以到后面声音会比图像快那么一两秒
我试了一下,cxk打篮球的视频也是可以的,嘻嘻