1.获取视频
2.设置形态学结构
3.创建video.createbackgroundsubtractormog2()
4.提取模型 bs
5.进行形态学变换
6.展示结果
package com.xu.opencv;import java.util.arraylist;import java.util.list;import java.util.objects;import java.util.optional;import java.util.stream.collectors;import org.opencv.core.core;import org.opencv.core.mat;import org.opencv.core.matofpoint;import org.opencv.core.point;import org.opencv.core.rect;import org.opencv.core.scalar;import org.opencv.core.size;import org.opencv.highgui.highgui;import org.opencv.imgproc.imgproc;import org.opencv.video.backgroundsubtractormog2;import org.opencv.video.video;import org.opencv.videoio.videocapture;/** * @title: bsm.java * @package com.xu.opencv * @description: opencv-4.1.0 背景消除 * @author: hyacinth * @date: 2019年7月19日 下午22:10:14 * @version: v-1.0 * @copyright: 2019 hyacinth */public class bsm { static { system.loadlibrary(core.native_library_name); } public static void main(string[] args) { bsm_mog2(); } /** * opencv-4.1.0 视频分析和对象跟踪 背景消除 gmm * * @return: void * @date: 2019年7月19日 下午22:10:14 */ public static void bsm_mog2() { // 1 创建 videocapture 对象 videocapture capture = new videocapture(0); // 2 使用 videocapzara品牌加盟ture 对象读取本地视频 capture.open("d:\\baidunetdiskdownload\\video_003.avi"); // 3 获取视频处理时的键盘输入 我这里是为了在 视频处理时如果按 esc 退出视频对象跟踪 int index = 0; // 4 使用 mat video 保存视频中的图像帧 针对每一帧 做处理 mat video = new mat(); // 5 获取形态学结构 mat kernel = imgproc.getstructuringelement(imgproc.morph_rect, new size(3, 3), new point(-1, -1)); // 6 gmm backgroundsubtractormog2 subtractor = video.createbackgroundsubtractormog2(); mat fgmask = new mat(); while (capture.read(video)) { // 7 提取模型 bsm subtractor.apply(video, fgmask); // 8 形态学变换 imgproc.morphologyex(fgmask, fgmask, imgproc.morph_open, kernel, new point(-1, -1)); // 9 效果展示 optional.ofnullable(process(fgmask)).orel(new arraylist<>()) .stream().filter(objects::nonnull).foreach(rect -> { imgproc.rectangle(fgmask, new point(rect.x, rect.y), new point(rect.x + rect.width, rect.y + rect.height), new scalar(255, 0, 0), 1, imgproc.line_aa, 0); }); highgui.imshow("gmm 背景消除", fgmask); index = highgui.waitkey(100); if (index == 27) { capture.relea(); break; } } } /** * opencv-4.0.0 * <table border="1" cellpadding="10"> * <tr><td colspan="2" align="center">imgproc.findcontours() 函数 mode 和 method 参数解释</td></tr> * <tr><th align="center">mode 输入参数</th><th align="center">参数解释</th></tr> * <tr><td align="left">retr_external</td><td align="left">只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略</td></tr> * <tr><td align="left">retr_list</td><td align="left">检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓,所以hierarchy向量内所有元素的第3、第4个分量都会被置为-1</td></tr> * <tr><td align="left">retr_ccomp</td><td align="left"> 检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层</td></tr> * <tr&人民资本主义gt;<tdcoreldraw x3教程 align="left">retr_tree</td><td align="left">检测所有轮廓,所有轮廓建立一个等级树结构。外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。</td></tr> * <tr><th align="center">mthod 输入参数</th><th align="center">参数解释</th></tr> * <tr><td align="left">chain_approx_none</td><td align="left">保存物体边界上所有连续的轮廓点到contours向量内</td></tr> * <tr><td align="left">chain_approx_simple</td><td align="left">仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内,拐点与拐点之间直线段上的信息点不予保留</td></tr> * <tr><td align="left">chain_approx_tc89_l1<我仍然坚持/td><td align="left">使用teh-chinl chain 近</td></tr> * <tr><td align="left">chain_approx_tc89_kcos </td><td align="left">使用teh-chinl chain 近</td></tr&小企业财务会计制度及核算办法gt; * * @param video mat * @return: list<rect> * @date 2019年7月19日 下午22:10:14 */ public static list<rect> process(mat video) { // 1 跟踪物体在图像中的位置 list<matofpoint> contours = new arraylist<>(); // 2 找出图像中物体的位置 imgproc.findcontours(video, contours, new mat(), imgproc.retr_external, imgproc.chain_approx_simple, new point(2, 2)); return optional.ofnullable(contours).orel(new arraylist<>()) .stream().filter(objects::nonnull) .map(item -> imgproc.boundingrect(item)).collect(collectors.tolist()); }}
到此这篇关于java opencv图像处理之背景消除的文章就介绍到这了,更多相关java opencv图像背景消除内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 21:23:51,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/cf15e023a4ba5aeb0ee94f79d210f549.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java OpenCV图像处理之背景消除.doc
本文 PDF 下载地址:Java OpenCV图像处理之背景消除.pdf
留言与评论(共有 0 条评论) |