opencv检测黑色轮廓:

import cv2
import numpy as np class ShapeDetector:
def __init__(self, image_path):
self.image_path = image_path
self.img = cv2.imread(self.image_path) # 读取图像
self.imgContour = self.img.copy() # 创建一个用于绘制轮廓的副本 def detect_shapes(self):
imgGray = cv2.cvtColor(self.img, cv2.COLOR_BGR2GRAY) # 转换为灰度图像
imgBlur = cv2.GaussianBlur(imgGray, (5, 5), 1) # 高斯模糊
imgCanny = cv2.Canny(imgBlur, 60, 60) # Canny边缘检测
self.shape_detection(imgCanny) # 进行形状检测 # 显示图像
cv2.imshow("原始图像", self.img)
cv2.imshow("灰度图", imgGray)
cv2.imshow("模糊图", imgBlur)
cv2.imshow("边缘检测图", imgCanny)
cv2.imshow("形状检测", self.imgContour) cv2.waitKey(0)
cv2.destroyAllWindows() def shape_detection(self, img):
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # 寻找轮廓
for obj in contours:
area = cv2.contourArea(obj) # 计算轮廓区域面积
cv2.drawContours(self.imgContour, [obj], -1, (255, 0, 0), 4) # 绘制轮廓线
perimeter = cv2.arcLength(obj, True) # 计算轮廓周长
approx = cv2.approxPolyDP(obj, 0.02 * perimeter, True) # 近似多边形
corner_num = len(approx) # 角点数量
x, y, w, h = cv2.boundingRect(approx) # 获取边界框坐标 if corner_num == 3:
obj_type = "三角形"
elif corner_num == 4:
for i in range(0, 4):
print("矩形角坐标%d:" % (i + 1), approx[i][0][0], approx[i][0][1])
cv2.circle(self.imgContour, (approx[i][0][0], approx[i][0][1]), 5, (0, 255, 255), 3)
if w == h:
obj_type = "正方形"
else:
obj_type = "矩形"
elif corner_num > 4:
obj_type = "多边形"
else:
obj_type = "未知" cv2.rectangle(self.imgContour, (x, y), (x + w, y + h), (0, 0, 255), 2) # 绘制边界框
cv2.putText(self.imgContour, obj_type, (x + (w // 2), y + (h // 2)), cv2.FONT_HERSHEY_COMPLEX, 0.6, (0, 0, 0), 1) if __name__ == "__main__":
image_path = './test.jpg'
shape_detector = ShapeDetector(image_path)
shape_detector.detect_shapes()

opencv检测黑色轮廓(矩形)的更多相关文章

  1. OpenCV—Python 轮廓检测 绘出矩形框(findContours\ boundingRect\rectangle

    千万注意opencv的轮廓检测和边缘检测是两码事 本文链接:https://blog.csdn.net/wsp_1138886114/article/details/82945328 1 获取轮廓 O ...

  2. 【OpenCV函数】轮廓提取;轮廓绘制;轮廓面积;外接矩形

    FindContours 在二值图像中寻找轮廓  int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_cont ...

  3. (转)使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    原文链接:https://blog.csdn.net/liqiancao/article/details/55670749 介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的 ...

  4. 深入学习OpenCV检测及分割图像的目标区域

    准备1:OpenCV常用图片转换技巧 在进行计算机视觉模型训练前,我们经常会用到图像增强的技巧来获取更多的样本,但是有些深度学习框架中的方法对图像的变换方式可能并不满足我们的需求,所以掌握OpenCV ...

  5. [OpenCV-Python] 21 OpenCV 中的轮廓

    文章目录 OpenCV-Python:IV OpenCV中的图像处理 21 OpenCV 中的轮廓 21.1 初识轮廓 21.1.1 什么是轮廓 21.1.2 怎样绘制轮廓 21.1.3 轮廓的近似方 ...

  6. 用 Python 和 OpenCV 检测图片上的条形码

      用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...

  7. 用 Python 和 OpenCV 检测图片上的条形码(转载)

    原文地址:http://python.jobbole.com/80448/ 假设我们要检测下图中的条形码: # load the image and convert it to grayscale 1 ...

  8. OpenCV学习笔记(12)——OpenCV中的轮廓

    什么是轮廓 找轮廓.绘制轮廓等 1.什么是轮廓 轮廓可看做将连续的点(连着边界)连在一起的曲线,具有相同的颜色和灰度.轮廓在形态分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找 ...

  9. OpenCV学习(28) 轮廓

    OpenCV中可以方便的在一副图像中检测到轮廓,并把这些轮廓画出来.主要用到两个函数:一个是findContours( img, contours0, hierarchy, RETR_TREE, CH ...

  10. Opencv,腐蚀,膨胀,轮廓检测,轮廓外接多边形

    //形态学腐蚀 cvErode(pDstImage,pDstImage,,); //形态学膨胀 cvDilate(pDstImage,pDstImage,,); //中值滤波 cvSmooth(pDs ...

随机推荐

  1. http://eslint.org/docs/rules/semi

    报错: Errors: 88 http://eslint.org/docs/rules/semi 56 http://eslint.org/docs/rules/quotes 34 http://es ...

  2. openssl基础使用(密码学 linux)

    目录        实验原理        实验过程            一.对称加密                1.使用rc4加解密                2.使用AES加解密     ...

  3. SDF Line相关公式推导

    SDF Line相关公式推导 线段是SDF形状的基元之一,可以被用来建模一些形状,比如昆虫的腿,植物的根茎等. 下面这篇文章介绍一下Line公式的推导,首先记住我们要求的变量,点到形状最近的距离. 那 ...

  4. MySQL-事务中的一致性读和锁定读的具体原理

    前言 上一篇文章MySQL-InnoDB行锁中,提到过一致性锁定读和一致性非锁定读,这篇文章会详细分析一下在事务中时,具体是如何实现一致性的. 一致性读原理 start transaction和beg ...

  5. 【Docker】DockerFile解析

    DockerFile解析 中文官网 英文官网 是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤 注意:Dockerfile可以构建出镜像, ...

  6. Java 与 LLM 大模型融合的技术革命:JBoltAI 如何重构企业级 AI 开发范式

    Java 与 LLM 大模型融合的技术革命:JBoltAI 如何重构企业级 AI 开发范式 一.Java 技术栈的智能化转型挑战 随着 LLM(大语言模型)技术的突破,全球超过 900 万家 Java ...

  7. 探秘Transformer系列之(22)--- LoRA

    探秘Transformer系列之(22)--- LoRA 目录 探秘Transformer系列之(22)--- LoRA 0x00 概述 0x01 背景知识 1.1 微调 1.2 PEFT 1.3 秩 ...

  8. nodejs实现命令行工具

    为什么使用nodejs实现命令行工具 Node.js是一个基于事件驱动I/O的JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 众所周知 ...

  9. Java8 Lambda Collection 的常见用法

    import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.huto ...

  10. freertos消息队列的值传递和指针传递

    消息队列的使用方法总结: 1.消息队列初始化(定义一个消息队列的结构体),一般在main.c中完成. 2.消息队列的发送:   a extern 消息队列   b 定义一个结构体的指针指向消息消息队列 ...