OpenCV-Python实现图像内物体的点击选取(附源码)

OpenCV杂谈_07


一. 需要做的前期准备
  1. 环境配置:
    Python版本:3.9.0
    功能包:opencv-python(4.5.2.52)、numpy(1.20.1)
  2. 一张提前拍摄好的用于鼠标点击选取物体的图片
  3. 一个用的顺手的IDE(本人推荐Pycharm)
二. 源码如下
import cv2
import numpy as np

coordinates = np.zeros((4, 2), np.int32)  # (4, 2):需要四个点,每个点都有x, y两个像素坐标;np.int32:转换为int型
counter = 0  # 用于计算点击、保存坐标的次数


# 通过在图像中进行鼠标左键点击,获取鼠标点击位置的像素坐标(注意点击顺序:左上 -> 右上 -> 左下 -> 右下)
def mousePoints(event, x, y, flags, params):
    global counter  # 使外边定义的counter在本函数中转换全局变量
    if counter < 5 and event == cv2.EVENT_LBUTTONDOWN:
        # print(x, y)
        coordinates[counter] = x, y
        counter += 1
        print(coordinates)


img = cv2.imread("books.jpg")
while True:
    if counter == 4:
        width, height = 250, 350  # 结果显示的窗口大小,可自行设置
        pst1 = np.float32([coordinates[0], coordinates[1], coordinates[2], coordinates[3]])
        pst2 = np.float32([[0, 0], [width, 0], [0, height], [width, height]])
        matrix = cv2.getPerspectiveTransform(pst1, pst2)  # 形变矩阵
        imgOutput = cv2.warpPerspective(img, matrix, (width, height))
        cv2.imshow("Output Image", imgOutput)

    for x in range(0, 4):
        cv2.circle(img, (coordinates[x][0], coordinates[x][1]), 3, (0, 0, 255), cv2.FILLED)  # 标记出鼠标点击的位置

    img = cv2.imread("books.jpg")
    cv2.imshow("Original Image", img)
    cv2.setMouseCallback("Original Image", mousePoints)
    cv2.waitKey(1)
三. 结果展示

在这里插入图片描述

四. 感悟与分享
  1. 学会获取图像中指定位置的点的像素坐标才是本次分享的初衷,虽然现在很多看图软件常常自带获图片中像素坐标的功能,但是能够在程序中实时地去调用这些像素坐标才能实现真正意义上的、更加复杂的图像处理。
  2. 参考课程及推荐:https://www.youtube.com/watch?v=DaQoorJQSZQ&list=PLMoSUbG1Q_r_sc0x7ndCsqdIkL7dwrmNF&index=10(内容为英文,且需要翻墙)
  3. 520快乐

如有问题,敬请指正。欢迎转载,但请注明出处。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值