首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在轮廓周围绘制边界框JavaCV?

在轮廓周围绘制边界框是一种常见的计算机视觉任务,可以通过使用JavaCV库来实现。JavaCV是一个基于OpenCV和FFmpeg的Java接口库,提供了丰富的图像和视频处理功能。

要在轮廓周围绘制边界框,可以按照以下步骤进行操作:

  1. 首先,使用JavaCV读取图像或视频帧,并将其转换为OpenCV的Mat对象。
  2. 对图像进行预处理,例如灰度化、二值化、滤波等操作,以便更好地提取轮廓。
  3. 使用OpenCV的轮廓检测函数(例如findContours)来检测图像中的轮廓。这将返回一个包含所有轮廓的列表。
  4. 遍历轮廓列表,对每个轮廓进行处理。
  5. 使用OpenCV的boundingRect函数计算轮廓的边界框。该函数将返回一个矩形,表示轮廓的最小外接矩形。
  6. 使用OpenCV的rectangle函数在原始图像或帧上绘制边界框。该函数需要指定边界框的左上角和右下角坐标,以及绘制的颜色和线宽。

以下是一个示例代码片段,展示了如何使用JavaCV在轮廓周围绘制边界框:

代码语言:java
复制
import org.bytedeco.javacpp.opencv_core.*;
import org.bytedeco.javacpp.opencv_imgproc.*;
import org.bytedeco.javacpp.opencv_highgui.*;
import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_highgui.*;

public class ContourBoundingBox {
    public static void main(String[] args) {
        // 读取图像
        Mat image = imread("path/to/image.jpg");

        // 灰度化处理
        Mat grayImage = new Mat();
        cvtColor(image, grayImage, COLOR_BGR2GRAY);

        // 二值化处理
        Mat binaryImage = new Mat();
        threshold(grayImage, binaryImage, 128, 255, THRESH_BINARY);

        // 轮廓检测
        MatVector contours = new MatVector();
        findContours(binaryImage, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

        // 绘制边界框
        for (int i = 0; i < contours.size(); i++) {
            Rect boundingBox = boundingRect(contours.get(i));
            rectangle(image, boundingBox.tl(), boundingBox.br(), new Scalar(0, 255, 0), 2, LINE_8, 0);
        }

        // 显示结果
        imshow("Contours with Bounding Boxes", image);
        waitKey(0);
    }
}

在上述示例中,我们首先读取图像并进行预处理,然后使用findContours函数检测轮廓。接下来,我们遍历轮廓列表,使用boundingRect函数计算边界框,并使用rectangle函数在原始图像上绘制边界框。最后,我们显示带有边界框的图像。

腾讯云提供了多个与计算机视觉相关的产品,例如腾讯云图像处理(Image Processing)和腾讯云智能视频分析(Intelligent Video Analytics)。您可以通过访问腾讯云官方网站获取更多关于这些产品的详细信息和使用指南。

请注意,本回答仅提供了一个基本的示例代码,实际应用中可能需要根据具体需求进行进一步的优化和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

opencv: 绘制矩形轮廓,并记录轮廓坐标

步骤简述 使用OpenCV绘制矩形轮廓,一般包括如下步骤: 转换为灰度图; 进行阈值处理; 进行中值滤波; 原始图像上绘制矩形。...附图解析 原始图像: 第一步,转换为灰度图: 第二步,经过阈值处理: 第三步,中值滤波后: 最后一步,原始图像上绘制矩形: 生成的记录文件(矩形轮廓四个端点的平面坐标.../origin.jpg') # 文档路径,用于记录轮廓坐标 txt_file = open('....threshold(src=pic, thresh=200, maxval=255, type=1) # 中值滤波,去除椒盐噪声 pic = cv2.medianBlur(pic, 5) # 边缘检测,得到的轮廓列表..._1, contours, _2 = cv2.findContours(pic, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 根据轮廓列表,循环原始图像上绘制矩形边界

3.5K30

C++ OpenCV轮廓周围矩形和圆形绘制

前面我们学习了轮廓提取,正常我们提到到轮廓截取出来时一般需要是矩形的图像,这次我们就来学习一下轮廓周围绘制矩形等。...相关API approxPolyDP,对图像轮廓点进行多边形拟合 approxPolyDP(inputArray curve,OutputArray approxCurve,double epsilon...,就是另个轮廓点之间最大距离数,5,6,7,,8,,,,, bool closed:表示输出的多边形是否封闭 ---- 矩形 boundingRect,得到轮廓周围最小矩形 Rect boundingRect...点的序列或向量 RotatedRect的参数:包含中心点坐标,以及矩形的长度和宽度还有矩形的偏转角度 ---- 代码演示 新建一个项目opencv-0025,配置属性(VS2017配置OpenCV通用属性),然后源文件写入...操作步骤 将源图像变为二值图像 发现轮廓,找到图像轮廓 通过API找到轮廓点上的最小包含矩形,圆,椭圆 绘制图像 ? ? ? 多边形拟合 ? 可旋转的最小矩形 ? 最小矩形 ? 最小包围圆形 ?

2.4K20

意不意外?Java也能实现美颜效果

前言 用JavaCV进行图片处理 上一次,我们进行了简单的图片处理,这次我们试试搞点新花样吧 图片处理进阶 这次也是一样,微信公众号的公共图库找了一张老人的照片 就决定是你了 JavaCV中,Mat...以下是关于JavaCV中的Mat对象的一些重要信息: Mat(矩阵)对象:Mat 是JavaCV中用于表示多维数据的类,通常用于表示图像、矩阵、张量等。它是对OpenCV中cv::Mat 类的封装。...边缘检测算法在对图像的边缘进行检测时,先大概检测出图像轮廓的一些像素点,然后通过一些连接规则将那些像素点连接起来,最后再检测并连接一些之前未被识别的边界点、去除检测到的虚假的像素点和边界点并形成一个整体的边缘...x和y方向上的缩放因子和偏移量,BORDER_DEFAULT表示边缘处使用默认值进行填充。...通俗易懂的讲,就是通过配合上面讲到的边缘算法找到皱纹,然后以皱纹为中心去模糊周围的空间,达到美颜的效果。

37830

计算机视觉 OpenCV Android | 基本特征检测 之 轮廓分析

(1)边界 最常见的获取轮廓的外接矩形是边界, 获取每个轮廓边界, 通过它可以得到与各个轮廓相对应的高度与宽度, 并能通过它计算出轮廓的纵横比。...通过轮廓点集合得到轮廓边界的API如下: boundingRect(MatOfPoint points) 其中,points是轮廓所有点的集合对象。注意其数据类型。...调用该API会返回一个Rect对象实例,它是OpenCV关于矩形的数据结构, 从中可以得到外界矩形(边界)的宽高, 然后就可以计算出轮廓的横纵比了。...这种情况下得到的边界不一定满足条件,有时候我们还需要获取轮廓的最小边界。...(2)最小边界 与上面边界不同的是, 获取到的最小边界有时候不是一个水平或者垂直的矩形, 而是一个旋转了一定角度的矩形, 但是最小外接矩形(最小边界)能够更加真实地反映出轮廓的几何结构大小,

1.4K20

基于OpenCV的车辆变道检测

捕获输入后,使用循环提取帧,并使用汽车的haar级联文件检测到的坐标,我们循环中汽车周围绘制一个矩形,以在对捕获的帧执行其他操作时获得一致性。...腐蚀用于减少图像中的斑点噪声,斑点会从图像中的对象边界腐蚀掉。膨胀具有局部最大值运算符的作用。当添加像素以平滑图像中对象的边界时,将使用膨胀来重新获得一些丢失的区域。...我们ROI中多次运行cv2.findContours()以获得实体,然后使用cv2.drawContours()绘制轮廓区域。...等高线可以是点,边,多边形等,因此绘制等高线时,我们进行多边形近似,以找到边的长度和区域的面积。...函数cv2.drawContours()的工作方式是从根节点开始绘制一棵树(数据结构),然后将后续点,边界和freeman链代码连接在一起。 找到轮廓后的另一个重要任务是匹配它们。

1.2K10

基于OpenCV的车辆变道检测

捕获输入后,使用循环提取帧,并使用汽车的haar级联文件检测到的坐标,我们循环中汽车周围绘制一个矩形,以在对捕获的帧执行其他操作时获得一致性。...腐蚀用于减少图像中的斑点噪声,斑点会从图像中的对象边界腐蚀掉。膨胀具有局部最大值运算符的作用。当添加像素以平滑图像中对象的边界时,将使用膨胀来重新获得一些丢失的区域。...我们ROI中多次运行cv2.findContours()以获得实体,然后使用cv2.drawContours()绘制轮廓区域。...等高线可以是点,边,多边形等,因此绘制等高线时,我们进行多边形近似,以找到边的长度和区域的面积。...函数cv2.drawContours()的工作方式是从根节点开始绘制一棵树(数据结构),然后将后续点,边界和freeman链代码连接在一起。 找到轮廓后的另一个重要任务是匹配它们。

1.2K10

最优拟合多边形

cv2.approxPolyDP(contours[i],epsilon,True)#计算逼近多边形 adp=cv2.drawContours(adp,[approx],0,(0,0,255),2)#绘制图像轮廓...cv2.imshow("result0.02",adp) cv2.waitKey() cv2.destroyAllWindows() 算法:最优拟合多边形是计算包围指定轮廓点集的点集,...最优拟合多边形边界表达的一种,采用Douglas-Peucker(DP)算法来实现。...DP算法: 先从轮廓中找出两个最远的点,将两点相连,即b-c 原来的轮廓上查找一个离线段距离最远的点,将该点加入逼近后的新轮廓中,即c-d 重复前面的算法,不断迭代,将最远的点添加进来,直到所有的点到多边形的最短距离小于指定的精度...approxCurve=cv2.approxPolyDP(curve, epsilon, closed) curve表示轮廓 psilon表示精度,原始轮廓边界点与拟合多边形边界之间的最大距离 closed

66131

还在用肉眼找不同吗?这个技术轻松搞定

具体来说,我们将在两个输入图片的不同处绘制边界。 为了计算两张图片的不同,我们将使用结构相似性索引(由wang等人首次提出)。在他们的2004年论文中,图像质量评估:从可视化误差到结构相似性。...现在我们已经将轮廓存储一个列表中,然后沿着每张图片的不同区域画出矩形。...# 遍历轮廓 for c in cnts: # 计算轮廓边界,然后两张输入图片中代表图片不同点的区域绘制边界 (x, y, w, h) = cv2.boundingRect(c) cv2...首先,我们使用cv2.boundingRect计算轮廓周围边界。 我们将相关的(x,y)坐标存储为x和y,此外将矩形的宽和高分别用w和h存储。...然后,我们使用这些值利用函数cv2.rectangle每个图片上绘制一个红色的矩形。 最后,我们显示对比图片的结果,包含将不同处框选出来的和阈值图片。

5.8K50

使用Python+OpenCV+dlib为人脸生成口罩

我们将通过某种方法获得面边界,其中我们分别使用图像中人脸的(x,y)坐标。一旦人脸区域被检测到并被限定,我们进入下一步检测脸部区域中的关键点。...此检测器会进行图像中人脸边界的检测。 检测器的第一个参数是我们的灰度图像。(此方法也适用于彩色图像)。 第二个参数是应用检测器之前对图像进行放大时要应用的图像金字塔层的数量。...人脸检测之前增加输入图像的分辨率的好处是可以让我们图像中检测到更多的人脸,但其缺点是,输入图像越大,计算开销越大,检测速度越慢。 我们还打印出边界的坐标以及检测到的人脸数。...我们也可以使用cv2检测到的面部周围使用for循环绘制边界。...例如,为了形成宽覆盖和中覆盖口罩,我们将用29点的标志点坐标连接(绘制)下颚线[0,16]的标志点。 可以使用OpenCV中椭圆和其他三种规则形状函数绘制口罩轮廓

1.7K11

「Adobe国际认证」Adobe Photoshop调整裁剪、旋转和画布大小

(可选)在要处理的图像周围绘制一个选区。 4.选取“文件”>“自动”>“裁剪并修齐照片”。将对扫描后的图像进行处理,然后在其各自的窗口中打开每个图像。...图像中,拖动关键的水平元素或垂直元素。 选项栏中,单击“拉直”。Photoshop 可拉直图像并可以自动对其进行裁剪。若要显示范围超出新建文档边界的图像区域,请选择“编辑”>“还原”。...如果您选取此选项,请在角度文本中输入一个介于 -359.99 和 359.99 度之间的角度。( Photoshop 中,可以选择“顺时针”或“逆时针”以顺时针或逆时针方向旋转。)...2.执行下列操作之一: “宽度”和“高度”中输入画布的尺寸。从“宽度”和“高度”旁边的弹出菜单中选择所需的测量单位。 选择“相对”,然后输入要从图像的当前画布大小添加或减去的数量。...动作将会播放,同时照片周围创建框架。

2.5K20

使用OpenCV实现一个文档自动扫描仪

它只需要在前景中的对象周围设置一个边界边界之外的所有内容都被视为背景。 GrabCut 会自动消除所有背景,即使边界框内也是如此。现在剩下的就是前景对象。...只保留检测到的最大轮廓 然后空白画布上绘制这个检测到的最大轮廓 【4】角点检测 + 排序。...我们 23 种不同的背景和不同的方向上进行了测试,自动文档扫描仪几乎在所有情况下都运行良好。...大多数其他情况下,我们的文档扫描仪运行良好。 这种方法的另一个限制是边缘和轮廓检测。...如果背景中存在大量噪声,则会检测到许多不需要的边缘,并且某些情况下,轮廓检测步骤可能会将这些边缘误认为是文档。此外,如果文档边缘与背景无法区分,则轮廓检测可能无法完全正常工作。

1.4K22

opencv+Recorder︱OpenCV 中的 Canny 边界检测+轮廓、拉普拉斯变换

. 3、非极大值抑制 获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非边界上的点。对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的。...寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测。 • 查找轮廓的函数会修改原始图像。如果你找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中。...每一个轮廓都是一个 Numpy 数组,包含对象边界点(x, y)的坐标。 . 2、怎样绘制轮廓 函数 cv2.drawContours() 可以被用来绘制轮廓。...它可以根据你提供的边界绘制任何形状。它的第一个参数是原始图像,第二个参数是轮廓,一个 Python 列表。第三个参数是轮廓的索引(绘制独立轮廓是很有用,当设置为 -1 时绘制所有轮廓)。...一幅图像上绘制所有的轮廓: import numpy as np import cv2 im = cv2.imread('test.jpg') imgray = cv2.cvtColor(im,cv2

2.7K51

基于Opencv的抠图

如将每个像素替换为该像素周围像素的均值。这样就可以平滑并替代那些强度变化明显的区域。然后,对模糊图像二值化。梯度图像中不大于90的任何像素都设置为0(黑色)。 否则,像素设置为255(白色)。...cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界顶层。cv2.RETR_TREE建立一个等级树结构的轮廓。...我们把list排序,点最多的那个轮廓就是我们要找的昆虫的轮廓。 OpenCV中通过cv2.drawContours图像上绘制轮廓。...第一个参数是指明在哪幅图像上绘制轮廓 第二个参数是轮廓本身,Python中是一个list第三个参数指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓 第四个参数是轮廓线条的颜色第五个参数是轮廓线条的粗细...cv2.minAreaRect()函数: 主要求得包含点集最小面积的矩形,这个矩形是可以有偏转角度的,可以与图像的边界不平行。

5.4K20

OpenCV测量物体的尺寸技能 get~

现在假设,物体的宽为150像素(基于其关联的边界)。...,顺序为左上,右上,右下和左下 # 然后绘制旋转边界轮廓 box = perspective.order_points(box) cv2.drawContours(orig,...如果轮廓区域足够大,第9-11行计算图中的选择边界,特别注意OpenCV2使用的是cv2.cv.BoxPoints函数,OpenCV3使用的是cv2.boxPoints函数。...然后,我们按照左上、右上、右下和左下的顺序排列旋转的边界坐标。 最后,第16-20行用绿色的线画出物体的轮廓,然后用红色的小圆圈绘制边界矩形的顶点。...现在我们已经对边界进行了排序,我们可以计算一系列的中点: # 打开有序的边界,然后计算左上和右上坐标之间的中点, # 再计算左下和右下坐标之间的中点 (tl, tr, br,

2.8K20

用python和opencv检测图像中的条形码

然而,正如你所看到的上图阈值化图片,条形码的垂直方向上存在这间隙。...一系列的腐蚀和膨胀操作之后,这些小斑点已经被成功的移除了,只剩下条形码的区域。 ? 最后寻找一下图片中条形码的区域的轮廓。...cnts = imutils.grab_contours(cnts) c = sorted(cnts, key = cv2.contourArea, reverse = True)[0] # 计算最大轮廓的旋转边界...(c) box = cv2.cv.BoxPoints(rect) if imutils.is_cv2() else cv2.boxPoints(rect) box = np.int0(box) # 检测到的条形码周围绘制边界并显示图片...然后,我们确定最大轮廓的最小的边界,并最后显示检测到的条形码。 正如我们下图所示,我们已经成功的检测到条形码 ?

2.9K40
领券