opencv实战项目(opencv实现图像轮廓提取并矢量化)

2025-08-13 21:15:01 0

opencv实战项目(opencv实现图像轮廓提取并矢量化)

各位老铁们好,相信很多人对opencv实战项目都不是特别的了解,因此呢,今天就来为大家分享下关于opencv实战项目以及opencv实现图像轮廓提取并矢量化的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

opencv实现图像轮廓提取并矢量化

整个项目的结构图:
编写DetectFaceDemo.java,代码如下:
view
plaincopyprint?
package com.njupt.zhb.test;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;
//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
public class DetectFaceDemo {
public void run() {
System.out.println("\nRunning DetectFaceDemo");
System.out.println(getClass().getResource("lbpcascade_frontalface.xml").getPath());
// Create a face detector from the cascade file in the resources
// directory.
//CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());
//Mat image = Highgui.imread(getClass().getResource("lena.png").getPath());
//注意:源程序的路径会多打印一个‘/’,因此总是出现如下错误
/*
* Detected 0 faces Writing faceDetection.png libpng warning: Image
* width is zero in IHDR libpng warning: Image height is zero in IHDR
* libpng error: Invalid IHDR data
*/
//因此,我们将第一个字符去掉
String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1);
CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);
Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1));
// Detect faces in the image.
// MatOfRect is a special container class for Rect.
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
// Draw a bounding box around each face.
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
}
// Save the visualized detection.
String filename = "faceDetection.png";
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);
}
}
package com.njupt.zhb.test;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;
//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
public class DetectFaceDemo {
public void run() {
System.out.println("\nRunning DetectFaceDemo");
System.out.println(getClass().getResource("lbpcascade_frontalface.xml").getPath());
// Create a face detector from the cascade file in the resources
// directory.
//CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());
//Mat image = Highgui.imread(getClass().getResource("lena.png").getPath());
//注意:源程序的路径会多打印一个‘/’,因此总是出现如下错误
/*
* Detected 0 faces Writing faceDetection.png libpng warning: Image
* width is zero in IHDR libpng warning: Image height is zero in IHDR
* libpng error: Invalid IHDR data
*/
//因此,我们将第一个字符去掉
String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1);
CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);
Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1));
// Detect faces in the image.
// MatOfRect is a special container class for Rect.
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
// Draw a bounding box around each face.
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
}
// Save the visualized detection.
String filename = "faceDetection.png";
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);
}
}
3.编写测试类:
view
plaincopyprint?
package com.njupt.zhb.test;
public class TestMain {
public static void main(String args) {
System.out.println("Hello, OpenCV");
// Load the native library.
System.loadLibrary("opencv_java246");
new DetectFaceDemo().run();
}
}
//运行结果:
//Hello, OpenCV
//
//Running DetectFaceDemo
///E:/eclipse_Jee/workspace/JavaOpenCV246/bin/com/njupt/zhb/test/lbpcascade_frontalface.xml
//Detected 8 faces
//Writing faceDetection.png
package com.njupt.zhb.test;
public class TestMain {
public static void main(String args) {
System.out.println("Hello, OpenCV");
// Load the native library.
System.loadLibrary("opencv_java246");
new DetectFaceDemo().run();
}
}
//运行结果:
//Hello, OpenCV
//
//Running DetectFaceDemo
///E:/eclipse_Jee/workspace/JavaOpenCV246/bin/com/njupt/zhb/test/lbpcascade_frontalface.xml
//Detected 8 faces
//Writing faceDetection.png

opencv是干什么的

OpenCV是一款由Intel公司俄罗斯团队发起并参与和维护的一个计算机视觉处理开源软件库,支持与计算机视觉和机器学习相关的众多算法,并且正在日益扩展。

OpenCV基于C++实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API,结合了OpenCV C++ API和Python语言的最佳特性。

作用:

OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。OpenCV在计算机视觉的发展中发挥了重要的作用,使成千上万的人能够在视觉上做更多的工作。OpenCV允许学生,研究人员,专业人员和创业者高效地实施项目,并通过向他们提供可在多种平台上优化的计算机视觉架构。

目标跟踪(5)使用 Opencv 和 Python 进行对象跟踪

在本教程中,我们将学习如何基于 Opencv 和 Python 实现对象跟踪。

首先必须明确目标检测和目标跟踪有什么区别:

我们将首先讨论对象检测,然后讨论如何将对象跟踪应用于检测。

可能有不同的应用,例如,计算某个区域有多少人,检查传送带上有多少物体通过,或者计算高速公路上的车辆。

当然,看过本教程后,您会很容易地想到数以千计的想法应用于现实生活或可能应用于工业。

在本教程中,我们将使用 3 个文件:

首先我们需要调用highway.mp4文件并创建一个mask:


正如您在示例代码中看到的,我们还使用了 createBackgroundSubtractorMOG2 函数,该函数返回背景比率(background ratio),然后创建mask。

mask可视化结果:

但是,如您所见,图像中有很多噪点。因此,让我们通过删除所有较小的元素来改进提取,并将我们的注意力集中在大于某个面积的对象上。


使用 OpenCV 的cv2.drawContours函数绘制轮廓,我们得到了这个结果。

就本教程而言,分析整个窗口并不重要。我们只对计算在某个点通过的所有车辆感兴趣,因此,我们必须定义一个感兴趣的区域 ROI 并仅在该区域应用mask。


结果可视化如下:

函数 cv2.createBackgroundSubtractorMOG2 是在开始时添加的,没有定义参数,现在让我们看看如何进一步改进我们的结果。history是第一个参数,在这种情况下,它设置为 100,因为相机是固定的。varThreshold改为 40,因为该值越低,误报的可能性就越大。在这种情况下,我们只对较大的对象感兴趣。


在继续处理矩形之前,我们对图像进行了进一步的清理。为此,阈值函数就派上用场了。从我们的mask开始,我们告诉它我们只想显示白色或黑色值,因此通过编写254, 255,只会考虑 254 和 255 之间的值。

然后我们将找到的对象的坐标插入到 if 条件中并绘制矩形


这是最终结果:

我们现在只需导入和集成跟踪功能。


一旦创建了对象,我们必须获取边界框的每个位置并将它们插入到单个数组中。

通过在屏幕上显示结果,您可以看到所有通过 ROI 的通道是如何被识别的,以及它们的位置是如何插入到特定的数组中的。显然,识别的摩托车越多,我们的数组就越大。

现在让我们将带有位置的数组传递给tracker.update()。我们将再次获得一个包含位置的数组,但此外,将为每个对象分配一个唯一的 ID。

从代码中可以看出,我们可以使用 for 循环分析所有内容。此时我们只需要绘制矩形并显示车辆 ID。

在图像中,您可以看到结果


main.py


从视频中也可以看到,我们已经获得了我们在本教程开始时设置的结果。

但是,您必须将其视为练习或起点,因为关于这个主题有很多话要说,而本教程的目的只是让您了解对象跟踪的原理。

如果你想将 Object Tracking 集成到你的项目中,你应该使用更可靠和先进的对象检测方法,以及跟踪方法。

完整代码地址:私信“333”直接获取或者「链接」

关于opencv实战项目和opencv实现图像轮廓提取并矢量化的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

opencv实战项目(opencv实现图像轮廓提取并矢量化)

本文编辑:admin

更多文章:


java在vscode下面怎么配置(win7安装visualstudiocode运行java终端)

java在vscode下面怎么配置(win7安装visualstudiocode运行java终端)

大家好,今天小编来为大家解答以下的问题,关于java在vscode下面怎么配置,win7安装visualstudiocode运行java终端这个很多人还不知道,现在让我们一起来看看吧!本文目录win7安装visualstudiocode运行

2026年9月17日 04:15

php后端教程(php后端开发需要懂什么)

php后端教程(php后端开发需要懂什么)

各位老铁们,大家好,今天由我来为大家分享php后端教程,以及php后端开发需要懂什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录php后端开发需

2025年10月12日 13:30

schoolbag英文怎么读(schoolbag的读音)

schoolbag英文怎么读(schoolbag的读音)

大家好,今天小编来为大家解答以下的问题,关于schoolbag英文怎么读,schoolbag的读音这个很多人还不知道,现在让我们一起来看看吧!本文目录schoolbag的读音schoolbag英文怎么读书包英文怎么读schoolbag书包的

2025年11月4日 09:45

ipafree软件源(iapfree的免费内购核心插件怎么下载 我已经下载了这个软件 可是点开来还是显示没有下载核心插件 怎搞)

ipafree软件源(iapfree的免费内购核心插件怎么下载 我已经下载了这个软件 可是点开来还是显示没有下载核心插件 怎搞)

大家好,今天小编来为大家解答以下的问题,关于ipafree软件源,iapfree的免费内购核心插件怎么下载 我已经下载了这个软件 可是点开来还是显示没有下载核心插件 怎搞这个很多人还不知道,现在让我们一起来看看吧!本文目录iapfree的免

2026年9月21日 21:00

statue怎么拼读(statue of liberty怎么读)

statue怎么拼读(statue of liberty怎么读)

今天给各位分享statue of liberty怎么读的知识,其中也会对statue of liberty怎么读进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录statue of liberty怎么读memor

2026年1月27日 02:45

java开发工程师一个月多少钱(Java程序开发的薪资待遇怎么样呢)

java开发工程师一个月多少钱(Java程序开发的薪资待遇怎么样呢)

本篇文章给大家谈谈java开发工程师一个月多少钱,以及Java程序开发的薪资待遇怎么样呢对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录Java程序开发的薪资待遇怎么样呢一个java工程师月薪大约有多少java的待遇怎么样Ja

2025年12月31日 23:30

今日疫情新闻发布会直播(2022呼和浩特新冠疫情最新消息呼和浩特新冠疫情最新消息通知)

今日疫情新闻发布会直播(2022呼和浩特新冠疫情最新消息呼和浩特新冠疫情最新消息通知)

大家好,今日疫情新闻发布会直播相信很多的网友都不是很明白,包括2022呼和浩特新冠疫情最新消息呼和浩特新冠疫情最新消息通知也是一样,不过没有关系,接下来就来为大家分享关于今日疫情新闻发布会直播和2022呼和浩特新冠疫情最新消息呼和浩特新冠疫

2025年12月8日 07:45

css3 书籍(请大家推荐几本学习html和css的书籍)

css3 书籍(请大家推荐几本学习html和css的书籍)

这篇文章给大家聊聊关于css3 书籍,以及请大家推荐几本学习html和css的书籍对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录请大家推荐几本学习html和css的书籍各位程序猿,我想学html和css,有介绍的书籍吗请大家

2026年3月15日 00:45

ueditor表格默认属性修改(百度编辑器 Ueditor 初始内容默认 怎么做)

ueditor表格默认属性修改(百度编辑器 Ueditor 初始内容默认 怎么做)

本篇文章给大家谈谈ueditor表格默认属性修改,以及百度编辑器 Ueditor 初始内容默认 怎么做对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录百度编辑器 Ueditor 初始内容默认 怎么做ueditor怎么设置表格边

2026年8月21日 04:00

string类型获得最后一位(字符串s中最后一个字符的位置是)

string类型获得最后一位(字符串s中最后一个字符的位置是)

各位老铁们好,相信很多人对string类型获得最后一位都不是特别的了解,因此呢,今天就来为大家分享下关于string类型获得最后一位以及字符串s中最后一个字符的位置是的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目

2025年11月1日 00:00

rm文件修复(如何修复RM视频文件)

rm文件修复(如何修复RM视频文件)

各位老铁们好,相信很多人对rm文件修复都不是特别的了解,因此呢,今天就来为大家分享下关于rm文件修复以及如何修复RM视频文件的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录如何修复RM视频文件视频文件损坏怎么修复

2026年2月28日 10:45

exile是什么意思及反义词 翻译exile的意思?exile是什么意思啊

exile是什么意思及反义词 翻译exile的意思?exile是什么意思啊

今天给各位分享exile是什么意思及反义词 翻译exile的意思的知识,其中也会对exile是什么意思及反义词 翻译exile的意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录exile是什么意思及反义词

2025年8月3日 07:00

update有复数吗(Upvote的翻译是:什么意思)

update有复数吗(Upvote的翻译是:什么意思)

大家好,update有复数吗相信很多的网友都不是很明白,包括Upvote的翻译是:什么意思也是一样,不过没有关系,接下来就来为大家分享关于update有复数吗和Upvote的翻译是:什么意思的一些知识点,大家可以关注收藏,免得下次来找不到哦

2025年9月4日 19:15

lllustrated英语怎么说(英语中译英(急,在线等~~))

lllustrated英语怎么说(英语中译英(急,在线等~~))

大家好,今天小编来为大家解答以下的问题,关于lllustrated英语怎么说,英语中译英(急,在线等~~)这个很多人还不知道,现在让我们一起来看看吧!本文目录英语中译英(急,在线等~~)llllustrated怎么读“Illustrated

2026年2月8日 04:30

js删除特效(js如何动态删除指定id系列元素)

js删除特效(js如何动态删除指定id系列元素)

其实js删除特效的问题并不复杂,但是又很多的朋友都不太了解js如何动态删除指定id系列元素,因此呢,今天小编就来为大家分享js删除特效的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录js如何动态删除指定id系列元

2026年2月1日 20:45

cad画电路图详细步骤(autocad绘制电气图教程)

cad画电路图详细步骤(autocad绘制电气图教程)

大家好,如果您还对cad画电路图详细步骤不太了解,没有关系,今天就由本站为大家分享cad画电路图详细步骤的知识,包括autocad绘制电气图教程的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录autocad绘制电气

2025年10月25日 23:45

ckeditor4上传图片(CKeditor 图片上传 完毕后的事件调用问题)

ckeditor4上传图片(CKeditor 图片上传 完毕后的事件调用问题)

大家好,今天小编来为大家解答以下的问题,关于ckeditor4上传图片,CKeditor 图片上传 完毕后的事件调用问题这个很多人还不知道,现在让我们一起来看看吧!本文目录CKeditor 图片上传 完毕后的事件调用问题CKEditor+C

2026年6月11日 02:30

三角函数值对照表全部初中(特殊角度的三角函数值是怎么样的呢)

三角函数值对照表全部初中(特殊角度的三角函数值是怎么样的呢)

各位老铁们好,相信很多人对三角函数值对照表全部初中都不是特别的了解,因此呢,今天就来为大家分享下关于三角函数值对照表全部初中以及特殊角度的三角函数值是怎么样的呢的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录特殊

2026年1月3日 15:15

换热器压力容器类别(换热器是否为压力容器)

换热器压力容器类别(换热器是否为压力容器)

今天给各位分享换热器是否为压力容器的知识,其中也会对换热器是否为压力容器进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录换热器是否为压力容器换热器是压力容器吗换热器分类管壳式换热器的容器类别怎么划分换热器是否为

2025年8月11日 07:30

做ppt免费的软件(做ppt的软件哪个好)

做ppt免费的软件(做ppt的软件哪个好)

其实做ppt免费的软件的问题并不复杂,但是又很多的朋友都不太了解做ppt的软件哪个好,因此呢,今天小编就来为大家分享做ppt免费的软件的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录做ppt的软件哪个好ppt制作

2026年2月23日 07:45

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索