当前位置: 首页 > news >正文

图像识别,图片线条检测

import cv2
import numpy as np
# 读取图片
img = cv2.imread('1.png')# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 边缘检测
edges = cv2.Canny(gray, 100, 200) 
'''当某个像素点的梯度强度低于 threshold1 时,该像素点被认为是非边缘;当梯度强度高于 threshold2 时,该像素点被认为是边缘;
当梯度强度在 threshold1 和 threshold2 之间时,如果它连接到一个“确定的边缘”(即梯度强度大于 threshold2 的像素点),则它也被认为是边缘。
'''
# 寻找曲线
contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #查找图像轮廓的函数,该函数能够查找图像内的轮廓信息'''cv2.RETR_EXTERNAL:只检测外轮廓。
cv2.RETR_LIST:对检测到的轮廓不建立等级关系。
cv2.RETR_CCOMP:检索所有轮廓并将它们组织成两级层次结构。上面的一层为外边界,下面的一层为内孔的边界。如果内孔内还有一个连通物体,
那么这个物体的边界仍然位于顶层。
cv2.RETR_TREE:建立一个等级树结构的轮廓。''''''cv2.CHAIN_APPROX_NONE:存储所有的轮廓点,相邻两个点的像素位置差不超过 1
cv2.CHAIN_APPROX_SIMPLE:压缩水平方向、垂直方向、对角线方向的元素,只保留该方向的终点坐标。
例如,在极端的情况下,一个矩形只需要用 4 个点来保存轮廓信息。
cv2.CHAIN_APPROX_TC89_L1:使用 teh-Chinl chain 近似算法的一种风格。
cv2.CHAIN_APPROX_TC89_KCOS:使用 teh-Chinl chain 近似算法的一种风格。'''#print(len(contours)) #获取轮廓的个数
# len(contours[0] #每个轮廓的点数
''''hierarchy:图像内的轮廓可能位于不同的位置。比如,一个轮廓在另一个轮廓的内部。在这种情况下,
我们将外部的轮廓称为父轮廓,内部的轮廓称为子轮廓。按照上述关系分类'''
# #创建白色幕布
temp = np.ones(edges.shape,np.uint8)*255# # 绘制曲线
cv2.drawContours(temp, contours, -1, (0, 255, 0), 5)
#-1表示绘制所有轮廓
#(0, 255, 0)颜色
#如果指定正数,则表示绘制的轮廓线的厚度,-1表示填充轮廓,即将轮廓内部全部填充指定颜色。# 为了保持颜色一致性,我们需要将temp从灰度图像转换回BGR颜色空间
temp_bgr = cv2.cvtColor(temp, cv2.COLOR_GRAY2BGR)# 将原始图片和temp_bgr合并,保持颜色一致性
output_img = cv2.addWeighted(img, 1, temp_bgr, 1, 0)#输出图片
output_path = 'output_image.png'
cv2.imwrite(output_path, output_img)# # # 显示结果
cv2.imshow('Result', output_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输入图片在这里插入图片描述
输出图片受上传大小的影响无法上传。

http://www.lryc.cn/news/424347.html

相关文章:

  • python crawler web page
  • 基于QT实现的TCP连接的网络通信(客户端)
  • Vue2中watch与Vue3中watch对比
  • Web 3 一些常见术语
  • 揭开数据分析中的规范性分析:从入门到精通
  • Linux文件IO
  • ccfcsp-202309(1、2、3)
  • 数据结构--数据结构概述
  • Spring中的BeanFactoryAware
  • Neo4j service is not installed
  • LeetCode 3132.找出与数组相加的整数 II:排序+3次尝试(nlog n)
  • 微信小程序--26(全局配置-1)
  • 汽车4S店管理系统-计算机毕设Java|springboot实战项目
  • bug的常见排查和分析思路以及相关的原因分类
  • Nature:7个提升科研产出的实用建议
  • react-native从入门到实战系列教程-页面之间的跳转
  • HarmonyOS应用开发者高级认证(一)
  • 【网络】套接字(socket)编程——UDP版
  • 一篇文章让你彻底掌握 Shell
  • Java中的Collection集合:深入理解与应用
  • Kubernetes-K8S
  • 简化文本处理流程,通用文字识别助力提升信息采集效率
  • 【网络】TCP协议通信的重要策略——滑动窗口,快重传,流量控制,拥塞控制,延时应答
  • 极狐GitLab CI/CD 如何构建镜像并推送到 azure 镜像仓库?
  • Leetcode—1143. 最长公共子序列【中等】
  • ZBrush笔刷介绍
  • React+AntDesign做一个日历,展示节假日,节气,并且在某几个时间上添加活动备注
  • 排序算法之梳排序
  • ESP8266 创建TCP连接
  • OceanBase内存管理小窍门