opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理

这篇具有很好参考价值的文章主要介绍了opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV的鼠标操作

实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback(),即鼠标事件回调

setMouseCallback(winname, onMouse,userdata=0)

winname: 接收鼠标事件的窗口名称
onMouse: 处理鼠标事件的回调函数指针
userdata: 传给回调函数的用户数据

 代码实现:鼠标点击图片时,读取当前鼠标对应位置的像素值(顺序为BGR),在鼠标所在位置的左上角显示当前坐标值和像素值;鼠标移动时,旧的文本框消失

import cv2
import numpy as np

img = cv2.imread('./158.jpg')#读取图片
font_face,font_scale,thickness=cv2.FONT_HERSHEY_SIMPLEX,0.5,1
#鼠标交互
def mouseHandler(event,x,y,flags,param):
    points = (x,y)
    global imgCopy
    #鼠标左键双击事件
    if event == cv2.EVENT_LBUTTONDBLCLK:
    	#输出坐标
        print(x,y)
        #拷贝一张与原图像格式相同的新图像
        imgCopy = img.copy()
        #拼接文字
        text = '['+str(x)+','+str(y)+']'+str(img[x,y])
        #读取文字(宽,高),下基线
        (t_w,t_h),baseLine = cv2.getTextSize(text,font_face,font_scale,thickness)
        #在鼠标当前位置的左上角显示文字
        cv2.putText(imgCopy,text,(x-t_w,y),font_face,font_scale,(125,125,125))
        cv2.imshow('win',imgCopy)
    #鼠标移动事件
    elif event == cv2.EVENT_MOUSEMOVE:
    	#显示原图片能使文本框消失
        cv2.imshow('win',img)

cv2.namedWindow('win')
#窗口与回调函数绑定
cv2.setMouseCallback('win',mouseHandler)
cv2.imshow('win',img)
cv2.waitKey()

IPM代码:

import cv2  
import numpy as np  
  
def multi_transform(img, pts1):  
  
    ROI_HEIGHT = 30000  
    ROI_WIDTH = 3750  
  
    # 设定逆透视图的宽度  
    IPM_WIDTH = 500  
    N = 5  
  
    # 保证逆透视图的宽度大概为N个车头宽  
    sacale=(IPM_WIDTH/N)/ROI_WIDTH  
    IPM_HEIGHT=ROI_HEIGHT*sacale  
  
    pts2 = np.float32([[IPM_WIDTH/2-IPM_WIDTH/(2*N), 0],  
                       [IPM_WIDTH/2+IPM_WIDTH/(2*N), 0],  
                       [IPM_WIDTH/2-IPM_WIDTH/(2*N), IPM_HEIGHT],  
                       [IPM_WIDTH/2+IPM_WIDTH/(2*N), IPM_HEIGHT]])  
  
    print(IPM_HEIGHT,IPM_WIDTH)  
  
    matrix = cv2.getPerspectiveTransform(pts1, pts2)  
    output = cv2.warpPerspective(img, matrix, (int(IPM_WIDTH),int(IPM_HEIGHT+50)))  
  
    for i in range(0, 4):  
        cv2.circle(img, (pts1[i][0], pts1[i][1]), 6, (0, 0, 255), cv2.FILLED)  
  
    for i in range(0,4):  
        cv2.circle(output, (pts2[i][0], pts2[i][1]),6, (0, 0, 255), cv2.FILLED)  
  
    # p1 = (0, 250)  
    # p2 = (img.shape[1], img.shape[0]-100)  
    # point_color = (255, 0, 0)  
    # cv2.rectangle(img, p1, p2, point_color, 2)  
    cv2.imshow("src image", img)  
    cv2.imshow("output image", output)  
  
    cv2.imwrite("output.jpg", output)  # 新增的代码,将处理后的图像保存为 "output.jpg"  
    cv2.waitKey(0)  
  
if __name__ == '__main__':  
    # 图像1  
    img = cv2.imread("./158.jpg")  
    pts1 = np.float32([[543, 462],       # p1  
                       [749, 466],       # p2  
                       [277, 536],       # p3  
                       [937, 546]])      # p4  
  
    # 图像2  
    # img = cv2.imread("./789.jpeg")  
    # pts1 = np.float32([[243, 189],       # p1  
    #                    [383, 186],       # p2  
    #                    [77, 253],       # p3  
    #                    [533, 253]])      # p4  
  
    multi_transform(img, pts1)

 原图:

opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理,opencv,python,人工智能

效果图:

opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理,opencv,python,人工智能

二值化处理:

import cv2  
  
# 读取原始图像  
img = cv2.imread('./498_1.jpg')  
  
# 将图像转换为灰度图像  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
  
# 对灰度图像进行二值化处理  
thresh, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)  
  
# 保存二值化后的图像  
cv2.imwrite('./498_3.jpg', binary)

opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理,opencv,python,人工智能

 文章来源地址https://www.toymoban.com/news/detail-658830.html

到了这里,关于opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV Python – 如何在图像上显示点击点的坐标?

    OpenCV为我们提供不同类型的鼠标事件,包括左键或右键单击、鼠标移动、左键双击等。鼠标事件返回鼠标事件的坐标(x,y)。为了在事件发生时执行一个操作,我们定义一个鼠标回调函数。我们使用左键单击(cv2.EVENT_LBUTTONDOWN)和右键单击(cv2.EVENT_RBUTTONDOWN)来显示在图像上单击的点

    2024年02月06日
    浏览(28)
  • 使用opencv-python(cv2)库进行相机标定

    2023年09月11日
    浏览(42)
  • Qt鼠标点击事件处理:显示鼠标点击位置(完整示例)

    Qt 入门实战教程(目录) 前驱文章: Qt Creator 创建 Qt 默认窗口程序(推荐) 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。 例如点击鼠标,按下按键。 在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 如鼠标事件(例如点击

    2024年02月10日
    浏览(39)
  • 使用python向窗口发送鼠标点击命令

    今天遇到一个问题。公司让用电脑在网页上看个视频。网页有个判断:一段时间没有鼠标活动,视频就会暂停。于是就想,能否隔一段时间就模拟鼠标点击一下视频暂停,再点一下继续播放。省得它自己停止播放。这样我就可以让网页窗口在后台,我去干别的。 研究了一下,

    2024年02月12日
    浏览(28)
  • Robocom比赛中使用opencv-python进行轨道线识别(附带python源码+讲解)

    此代码是本人参加Robocom比赛中完成其中一个要求模块使用的代码。主要功能是根据给定的图片,识别出黑色轨道线的线条在图片中的大致位置。如下图所示: 比赛要求 :编写代码,从200张图片中随机选出20张图像,标出图像中 黑色线条的位置,并在终端中以文字形式输出机

    2024年02月12日
    浏览(63)
  • vue 鼠标点击图片做红点标记

    需要实现点击图片标记红点,主要实现了两种方式: 只要鼠标点击,就进行标记,可标记多个点,再次点击已标记的点,就取消勾选 鼠标多次点击界面只存在一个点 一、只要鼠标点击,就进行标记,可标记多个点,再次点击已标记的点,就取消标记 实现效果 实现代码 二、鼠

    2024年02月11日
    浏览(31)
  • Opencv-Python入门———配置opencv-python环境

    1.1配置python环境及编译器(Pycharm)下载 进入Pycharm官网下载Pycharm   PyCharm: the Python IDE for Professional Developers by JetBrains https://www.jetbrains.com/pycharm/ 进入Python官网下载最新版本Python Download Python | Python.org https://www.python.org/downloads/ 安装细则可参照博客 (36条消息) python,pycharm的安装

    2024年02月11日
    浏览(27)
  • python+opencv实现显示摄像头,截取相关图片,录取相关视频

    实时显示摄像头图像 按下空格键,截取图片 按下tab键,开始录制摄像内容,再次按下,结束录制  按下Esc键,关闭窗口 截图:  可以添加函数来使图像的显示效果改变(边缘检测效果): 自行在对应的帧显示处调用:  

    2024年02月14日
    浏览(30)
  • echarts 使用地图,设置背景图片和高亮图片,点击实现高亮显示,更换散点图图片,高亮散点图形,3D悬浮效果展示地图,集成Vue组件

    先看下   需要实现的效果: 第一步 需准备需要的插件  1  注意新版 echarts 的引入方式为:  import * as echarts from \\\'echarts\\\',这里我把 echarts 直接挂载到了Vue上,本项目使用echarts比较多,这样的话很方便,也可以在需要echarts的模块按需引入        在main.js中添加以下代码:

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包