opencv帧差法找出相差大的图像

本文实例为大家分享了opencv帧差法找出相差大的图像,供大家参考,具体内容如下

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/ml/ml.hpp>
#include <string.h>

#define IMAGENO 18456
using namespace std;
using namespace cv;

int main(int argc,char * argv())
{
 string ImgName;
 char OutName[100];
 Mat Image,tempImage,previousImage,currentImage,resultImage;

 ifstream fin("ImageList.txt");
 //ifstream fin("new.txt");

 for(int num=0; num<IMAGENO && getline(fin,ImgName); num++)
 {
 cout <<"读入"<<ImgName<<endl;
 ImgName = "E:\\Image\\" + ImgName ;

 Image = imread(ImgName);
 resize(Image,tempImage,Size(130,130));
 if (num == 0)
 {
  cvtColor(tempImage, previousImage, CV_BGR2GRAY);
  sprintf(OutName,"E:\\数据集\\目标区域图像\\StudentsArea抠图筛选\\%5d.jpg",num);
  imwrite(OutName,Image);
 }
 if (num > 0)
 {
  cvtColor(tempImage, currentImage, CV_BGR2GRAY);
  absdiff(currentImage,previousImage,resultImage); //帧差法,相减
  threshold(resultImage, resultImage, 20, 255.0, CV_THRESH_BINARY); //二值化,像素值相差大于20则置为255,其余为0
  int counter = 0;
  // 访问mat中的像素
  for (int i=0; i<resultImage.rows; i++)
  {
  uchar *data = resultImage.ptr<uchar>(i); //获取每一行的指针
  for (int j=0;j<resultImage.cols; j++)
  {
   if (data[j] == 255) //访问到像素值
   {
   counter++;
   }
  }
  }
  if (counter > 4000) //达到阈值的像素数达到一定的数量则保存该图像
  {
  sprintf(OutName,"E:\\Image筛选之后\\%5d.jpg",num);
  imwrite(OutName,Image);
  }
  cvtColor(tempImage, previousImage, CV_BGR2GRAY);
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • opencv实现三帧差法解析

    今天和大家谈谈三帧差法来实现运动目标检测吧,其中运动检测画框实现追踪方法多种多样,大家可以自行百度,后面我也会一一实现,今天我先给大家玩玩三帧差法吧::::(注释非常清楚哦,程序也极其简单的) 帧差法是最为常用的运动目标检测和分割方法之一,基本原理就是在图像序列相邻两帧或三帧间采用基于像素的时间差分通过闭值化来提取出图像中的运动区域.首先,将相邻帧图像对应像素值相减得到差分图像,然后对差分图像二值化,在环境亮度变化不大的情况下,如果对应像素值变化小于事先确定的阂值时,可以认为此处为背景像素:如果

  • OpenCV实现帧间差分法详解

    本文实例为大家分享了OpenCV实现帧间差分法的具体方法,供大家参考,具体内容如下 一.基本概念 基于视频的车辆检测算法种类很多:光流法检测,帧差法,背景消除法(其中包括:直方图法,平均值法,单分布和混合高斯分布背景模型,Kalman滤波等),边缘检测法,运动矢量检测法...下面分享的是运动目标检测算法中最基本的方法-帧间差分法. 相邻帧间图像差分思想:检测出了相邻两帧图像中发生变化的区域.该方法是用图像序列中的连续两帧图像进行差分,然后二值化该灰度差分图像来提取运动信息.由帧间变化区域检测分割

  • OpenCV实现帧差法检测运动目标

    今天的目标是用OpenCV实现对运动目标的检测,这里选用三帧帧差法.代码如下: #include <opencv2/opencv.hpp> #include <cv.h> #include <highgui.h> #include <stdio.h> #include <ctype.h> double Threshold_index=0; const int CONTOUR_MAX_AERA = 200; void trackbar(int po

  • python+opencv实现移动侦测(帧差法)

    本文实例为大家分享了python+opencv实现移动侦测的具体代码,供大家参考,具体内容如下 1.帧差法原理 移动侦测即是根据视频每帧或者几帧之间像素的差异,对差异值设置阈值,筛选大于阈值的像素点,做掩模图即可选出视频中存在变化的桢.帧差法较为简单的视频中物体移动侦测,帧差法分为:单帧差.两桢差.和三桢差.随着帧数的增加是防止检测结果的重影. 2.算法思路 文章以截取视频为例进行单帧差法移动侦测 3.python实现代码 def threh(video,save_video,thres1,ar

  • opencv帧差法找出相差大的图像

    本文实例为大家分享了opencv帧差法找出相差大的图像,供大家参考,具体内容如下 #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>

  • Opencv二帧差法检测运动目标与提取轮廓

    Opencv学习之二帧差法运动目标检测与轮廓提取 ,供大家参考,具体内容如下 代码是从网上摘抄学习的,加了好多注释,感觉就像边看书边做笔记一样,给人以满足的享受.Let's do this! #include "highgui.h" #include "cv.h" #include "stdio.h" #include <time.h> #include <math.h> #include <string.h>

  • Qt+OpenCV利用帧差法实现车辆识别

    目录 一.目标 二.使用Qt界面 三.代码实现 一.目标 Qt界面实现 点击 线程启动按钮播放视频 左边界面显示原视频 右边界面显示车辆识别视频 结果展示如下: 初始界面 点击线程启动后,即可车辆识别 二.使用Qt界面 设计好界面后最好先保存 对按钮设置槽函数 三.代码实现 难点在于:线程同步问题 需要使用到connect函数中的第五个参数[第五个参数 具体说明如下] 1 AutoConnection 为默认参数,由发送信号决定,如果发送信号和接受信号是同一个线程,则调用DirectConnec

  • Python实现找出数组中第2大数字的方法示例

    本文实例讲述了Python实现找出数组中第2大数字的方法.分享给大家供大家参考,具体如下: 题目比较简单直接看实现即可,具体的注释在代码中都有: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找出数组中第2大的数字 ''' def find_Second_large_num(num_list): ''''' 找出数组中第2大的数字 ''' #直接排序,输出倒数第二个数即可 tmp_list=sorted(num_lis

  • js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结

    本文实例讲述了js找出5个数中最大的一个数和倒数第二大的数实现方法.分享给大家供大家参考,具体如下: 最大的一个数 : 方法1: <script> var max=Math.max(1,2,3,4,5,2,8); console.log(max) //5 //如果这5个数是数组 可以用apply方法 var max1=Math.max.apply(this,[1,2,3,4,5,2,8]); console.log(max1); </script> 方法2: <script&

  • C++使用opencv处理两张图片的帧差

    本文为大家分享了使用opencv处理两张图片帧差的具体代码,供大家参考,具体内容如下 这个程序是两张图片做帧差,用C++实现的,把不同的地方用框框起来,仔细读一下程序,应该还是蛮简单的哈哈,opencv处理图片的基础. opencv配置不用我说了吧,源码cmake编译,然后导入vs即可. #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int mai

  • python opencv 找出图像中的最大轮廓并填充(生成mask)

    本文主要介绍了python opencv 找出图像中的最大轮廓并填充,分享给大家,具体如下: import cv2 import numpy as np from PIL import Image from joblib import Parallel from joblib import delayed # Parallel 和 delayed是为了使用多线程处理 # 使用前需要安装joblib:pip install joblib # img_stack的shape为:num, h, w #

随机推荐