视频处理三帧差分法简易代码
2015-10-14 22:30
387 查看
#include "stdafx.h"
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
const int threshold1 = 25;
const int threshold2 = 25;
int main()
{
VideoCapture cap(0);
namedWindow("test", 0);
if (!cap.isOpened())
{
cout << "open is file " << endl;
return 0;
}
//存三帧图片
Mat img;
Mat preimg;
Mat nextimg;
int flag;
Mat gray1, gray2, gray3;
//存两次相减的图片
Mat gray_img1, gray_img2;
Mat gray_img31, gray_img32;
Mat gray_img13, gray_img12;
Mat gray_img21, gray_img23;
//显示前景
Mat gray;
cap >> preimg;
cvtColor(preimg, gray1, CV_BGR2GRAY);
cap >> img;
cvtColor(img, gray2, CV_BGR2GRAY);
for (;;)
{
cap >> nextimg;
cvtColor(nextimg, gray3, CV_BGR2GRAY);
//第二帧减第一帧
subtract(gray2, gray1, gray_img21);
subtract(gray1, gray2, gray_img12);
add(gray_img21, gray_img12, gray_img1);
subtract(gray3, gray2, gray_img32);
subtract(gray2, gray3, gray_img23);
add(gray_img32, gray_img23, gray_img2);
for (int i = 0; i<gray_img1.rows; i++)
{
for (int j = 0; j<gray_img1.cols; j++)
{
if (abs(gray_img1.at<unsigned char >(i, j)) >= threshold1)
gray_img1.at<unsigned char>(i, j) = 225;
else gray_img1.at<unsigned char>(i, j) = 0;
if (abs(gray_img2.at<unsigned char >(i, j) >= threshold2))
gray_img2.at<unsigned char>(i, j) = 225;
else gray_img2.at<unsigned char>(i, j) = 0;
}
}
bitwise_and(gray_img1, gray_img2, gray);
dilate(gray, gray, Mat());
erode(gray, gray, Mat());
imshow("test", gray);
namedWindow("test1", 0);
imshow("test1", nextimg);
gray1 = gray2.clone();
gray2 = gray3.clone();
if (waitKey(30) >= 0) break;
}
return 0;
}
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
const int threshold1 = 25;
const int threshold2 = 25;
int main()
{
VideoCapture cap(0);
namedWindow("test", 0);
if (!cap.isOpened())
{
cout << "open is file " << endl;
return 0;
}
//存三帧图片
Mat img;
Mat preimg;
Mat nextimg;
int flag;
Mat gray1, gray2, gray3;
//存两次相减的图片
Mat gray_img1, gray_img2;
Mat gray_img31, gray_img32;
Mat gray_img13, gray_img12;
Mat gray_img21, gray_img23;
//显示前景
Mat gray;
cap >> preimg;
cvtColor(preimg, gray1, CV_BGR2GRAY);
cap >> img;
cvtColor(img, gray2, CV_BGR2GRAY);
for (;;)
{
cap >> nextimg;
cvtColor(nextimg, gray3, CV_BGR2GRAY);
//第二帧减第一帧
subtract(gray2, gray1, gray_img21);
subtract(gray1, gray2, gray_img12);
add(gray_img21, gray_img12, gray_img1);
subtract(gray3, gray2, gray_img32);
subtract(gray2, gray3, gray_img23);
add(gray_img32, gray_img23, gray_img2);
for (int i = 0; i<gray_img1.rows; i++)
{
for (int j = 0; j<gray_img1.cols; j++)
{
if (abs(gray_img1.at<unsigned char >(i, j)) >= threshold1)
gray_img1.at<unsigned char>(i, j) = 225;
else gray_img1.at<unsigned char>(i, j) = 0;
if (abs(gray_img2.at<unsigned char >(i, j) >= threshold2))
gray_img2.at<unsigned char>(i, j) = 225;
else gray_img2.at<unsigned char>(i, j) = 0;
}
}
bitwise_and(gray_img1, gray_img2, gray);
dilate(gray, gray, Mat());
erode(gray, gray, Mat());
imshow("test", gray);
namedWindow("test1", 0);
imshow("test1", nextimg);
gray1 = gray2.clone();
gray2 = gray3.clone();
if (waitKey(30) >= 0) break;
}
return 0;
}
相关文章推荐
- android 代码实现控件之间的间距
- [Android]在代码里运行另一个程序的方法
- 肯特·贝克:改变人生的代码整理魔法
- 网页恶意代码的预防
- 高手写的Tracer-Flash代码调试类代码下载
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- CreateWeb.vbs 代码
- Lua中编译执行代码相关的函数详解
- 更有效率的css代码编写第1/3页
- 代码中到底应不应当写注释?
- SQL语言查询基础:连接查询 联合查询 代码
- 论坛头像随机变换代码
- .NET 常用功能和代码小结
- C#实现压缩HTML代码的方法
- asp编程中常用的javascript辅助代码第1/2页
- C#超实用代码段合集
- Javascript代码在页面加载时的执行顺序介绍
- JS实现图片无间断滚动代码汇总
- 我的论坛源代码(二)