首页 > 其他分享 >OpenCV技术学习

OpenCV技术学习

时间:2025-01-20 13:56:40浏览次数:3  
标签:__ gray img kernel cv2 mask 技术 学习 OpenCV

7.1霍夫变换应用技术

实现结果:

对变化的线条检测:

import cv2
import numpy
import numpy as np
import math


def getMask(img):
    mask=numpy.zeros_like(img)
    ignore_mask_color=255
    imshape=img.shape
    vertices = np.array([[(0, imshape[0]),(5,697),(5,400), (450, 230), (520, 230),(974,420),(974,697), (imshape[1], imshape[0])]], dtype=np.int32)
    cv2.fillPoly(mask,vertices,ignore_mask_color)
    # 位乘法
    mask_img = cv2.bitwise_and(img, mask)
    return mask_img

def baseHufu():
    img=cv2.imread("./image/chedao.jpg")
    #灰度化
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #滤波
    kernel_size=5
    blur_gary=cv2.GaussianBlur(gray,(kernel_size,kernel_size),0)
    #边缘检测
    edges=cv2.Canny(blur_gary,50,200,3)
    #遮罩
    mask_img=getMask(edges)

    #使用霍夫检测直线
    minlin = 10
    maxlen = 20
    maxLineGap=10
    lines=cv2.HoughLinesP(mask_img,3,np.pi/180,80,minlin,maxlen,maxLineGap)
    for l in lines:
        x1,y1,x2,y2=l[0]
        cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)


#计算角度
def hF():
    img = cv2.imread("./image/huofu1.png")
    #灰度化
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #滤波
    kernel_size = 5
    blur_gary = cv2.GaussianBlur(gray, (kernel_size, kernel_size), 0)
    #二值化
    ret,thresh=cv2.threshold(blur_gary,100,255,cv2.THRESH_BINARY)
    #霍夫变换
    minlin = 20
    maxlen = 20
    maxLineGap = 40
    lines=cv2.HoughLinesP(thresh,2,np.pi/180,minlin,maxlen,maxLineGap)
    for l in lines:
        x1,y1,x2,y2=l[0]
        cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)
        theta=(y2-y1)/(x2-x1)
        #弧度
        angle=math.atan(theta)
        #角度
        angle=angle*(180/np.pi)
        print(angle)




    # cv2.imshow("blur_gray",blur_gary)
    # cv2.imshow("edges", edges)
    # cv2.imshow("mask", mask_img)
    cv2.imshow("thrsh", thresh)
    cv2.imshow("hu",gray)
    cv2.imshow("img", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()



if __name__ == '__main__':
    # baseHufu()
    hF()

解析:

  • 导入模块

    • import cv2:导入 opencv 库,用于图像处理操作。
    • import numpy:导入 numpy 库,用于处理数组数据。
    • import numpy as np:导入 numpy 库并使用 np 作为别名,方便使用 numpy 的函数和对象。
    • import math:导入 math 库,用于数学计算。
  • 函数定义

    • getMask(img)
      • 功能:生成图像的遮罩。
      • 实现:
        • 创建与输入图像 img 形状相同的全零数组 mask
        • 定义 ignore_mask_color 为 255。
        • 获取 img 的形状信息 imshape
        • 定义多边形顶点 vertices 作为遮罩区域的边界。
        • 使用 cv2.fillPoly 函数填充 mask 中由 vertices 定义的区域。
        • 使用 cv2.bitwise_and 对 img 和 mask 进行位与操作,生成遮罩后的图像 mask_img
        • 返回 mask_img
    • baseHufu()
      • 功能:处理车道图像,包括灰度化、滤波、边缘检测、遮罩和直线检测。
      • 实现:
        • 读取车道图像 ./image/chedao.jpg
        • 将图像灰度化得到 gray
        • 使用 cv2.GaussianBlur 对 gray 进行高斯滤波,核大小为 (kernel_size, kernel_size)
        • 使用 cv2.Canny 进行边缘检测。
        • 调用 getMask 函数生成遮罩图像 mask_img
        • 使用 cv2.HoughLinesP 进行直线检测,设定直线检测的参数(最小长度、最大长度、最大线段间隙等)。
        • 遍历检测到的直线,在原始图像 img 上绘制红色直线。
    • hF()
      • 功能:处理图像 ./image/huofu1.png,包括灰度化、滤波、二值化、直线检测和角度计算。
      • 实现:
        • 读取图像。
        • 进行灰度化、高斯滤波和二值化操作。
        • 使用 cv2.HoughLinesP 进行直线检测,设定相应参数。
        • 遍历检测到的直线,在原始图像 img 上绘制红色直线。
        • 计算直线的斜率 theta,并将其转换为弧度 angle,再转换为角度。
        • 打印直线的角度。
        • 显示部分处理结果图像(thrshhuimg)。
  • 主程序部分

    • if __name__ == '__main__':
      • 功能:确保代码作为脚本运行时执行相应的函数。
      • 调用 hF() 函数。

标签:__,gray,img,kernel,cv2,mask,技术,学习,OpenCV
From: https://blog.csdn.net/yzx991013/article/details/145260844

相关文章

  • AI - ReAct 技术与 Function Call 技术介绍
    ReAct技术与FunctionCall技术介绍1.ReAct技术ReAct是一种用于增强语言模型推理能力的技术,通过在模型的推理过程中引入“思考”(thought)步骤,帮助模型更好地理解和规划下一步行动。核心思想:ReAct在传统的“行动-观察”(action-observation)循环中加入了“思考”步骤,......
  • C#/.NET/.NET Core技术前沿周刊 | 第 22 期(2025年1.13-1.19)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。......
  • Maui学习笔记-系统主题切换
    Maui提供了一种根据当前应用程序主题设置属性的机制,但是它不包含用于在UI中切换主题的组件,需要我们自行创建。创建项目 首先创建一个ThemeInfo类来存储应用程序主题对象及标题。这些对象会在Picker元素中显示。添加CommunityToolkit.Mvvm工具包,创建一个ThemeSettings主......
  • 基于YOLOv5、YOLOv8和YOLOv10的电子产品零部件检测:深度学习应用与实现
    引言随着现代电子产品的普及和制造业的快速发展,产品质量控制变得尤为重要。传统的人工检测方法不仅效率低下,还容易受到人为因素的影响,导致检测结果不准确或不一致。深度学习技术,特别是目标检测技术的飞速发展,为电子产品零部件的自动化检测提供了新的解决方案。YOLO(YouOnly......
  • 基于YOLOv5、YOLOv8与YOLOv10的家居安防摄像头异常活动监测:深度学习实现与应用
    引言随着智能家居的普及,安防监控已经成为家庭安全不可或缺的一部分。尤其是利用深度学习模型进行异常活动的监测,可以有效提高家居安防系统的智能化程度,提前识别潜在的危险活动,保护居住者的安全。传统的家居安防系统往往依赖于简单的动作检测或定时拍摄,无法做到实时、精准的......
  • 基于YOLOv5、YOLOv8和YOLOv10的自助售货机商品检测:深度学习实践与应用
    引言自助售货机已经成为现代零售和自动化销售领域的重要组成部分。在自助售货机中,商品的检测与管理至关重要。通过精准的商品检测技术,售货机可以在商品售出后自动更新库存,并提供准确的商品信息反馈。然而,在复杂的环境下进行商品检测是一个具有挑战性的问题,尤其是在商品种类......
  • 每日学习30分轻松掌握CursorAI:Cursor AI使用技巧总结
    CursorAI使用技巧总结一、学习回顾与最佳实践总结1.快捷键使用总结表类别快捷键功能描述代码生成Ctrl+K通过自然语言生成代码代码补全Tab接受代码建议代码重构Ctrl+R重命名变量/函数AI对话Ctrl+L打开AI对话窗口代码导航Ctrl+P快速文件切换终端操作Ctrl+`打开......
  • 如何用3个月零基础入门网络安全?_网络安全零基础怎么学习
    ......
  • 2024 年技术盘点与展望:从 AI 辅助到个人成长的多元探索
    一、引言2024年,技术领域的发展日新月异,我在这片汹涌的浪潮中不断探索与成长。这一年,我不仅见证了人工智能技术的飞速发展,还通过AI辅助创作、AI赋能编程以及参与各类竞赛与课程,实现了个人技术的显著提升与视野的拓展。本文将从总结盘点的角度,回顾我在技术领域的成长历程,并......
  • 圆方树学习笔记
    元方树。下文除特殊强调外,所有图皆为无向图。引入割点:在图中,删除某个点后,导致图不再连通的点。点双连通:在一张图中,取两个点\(u\)、\(v\),无论删去哪个点(除\(u\)、\(v\)自身外),\(u\)、\(v\)都能连通,我们就说\(u\)和\(v\)点双连通。点双连通分量(后文称点双):对于一个无向......