我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python+OpenCV如何实现在图像上绘制矩形

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python+OpenCV如何实现在图像上绘制矩形

小编给大家分享一下Python+OpenCV如何实现在图像上绘制矩形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

代码

import copyimport cv2import numpy as np WIN_NAME = 'draw_rect'  class Rect(object):    def __init__(self):        self.tl = (0, 0)        self.br = (0, 0)     def regularize(self):        """        make sure tl = TopLeft point, br = BottomRight point        """        pt1 = (min(self.tl[0], self.br[0]), min(self.tl[1], self.br[1]))        pt2 = (max(self.tl[0], self.br[0]), max(self.tl[1], self.br[1]))        self.tl = pt1        self.br = pt2  class DrawRects(object):    def __init__(self, image, color, thickness=1):        self.original_image = image        self.image_for_show = image.copy()        self.color = color        self.thickness = thickness        self.rects = []        self.current_rect = Rect()        self.left_button_down = False     @staticmethod    def __clip(value, low, high):        """        clip value between low and high        Parameters        ----------        value: a number            value to be clipped        low: a number            low limit        high: a number            high limit        Returns        -------        output: a number            clipped value        """        output = max(value, low)        output = min(output, high)        return output     def shrink_point(self, x, y):        """        shrink point (x, y) to inside image_for_show        Parameters        ----------        x, y: int, int            coordinate of a point        Returns        -------        x_shrink, y_shrink: int, int            shrinked coordinate        """        height, width = self.image_for_show.shape[0:2]        x_shrink = self.__clip(x, 0, width)        y_shrink = self.__clip(y, 0, height)        return (x_shrink, y_shrink)     def append(self):        """        add a rect to rects list        """        self.rects.append(copy.deepcopy(self.current_rect))     def pop(self):        """        pop a rect from rects list        """        rect = Rect()        if self.rects:            rect = self.rects.pop()        return rect     def reset_image(self):        """        reset image_for_show using original image        """        self.image_for_show = self.original_image.copy()     def draw(self):        """        draw rects on image_for_show        """        for rect in self.rects:            cv2.rectangle(self.image_for_show, rect.tl, rect.br,                          color=self.color, thickness=self.thickness)     def draw_current_rect(self):        """        draw current rect on image_for_show        """        cv2.rectangle(self.image_for_show,                      self.current_rect.tl, self.current_rect.br,                      color=self.color, thickness=self.thickness)  def onmouse_draw_rect(event, x, y, flags, draw_rects):    if event == cv2.EVENT_LBUTTONDOWN:        # pick first point of rect        print('pt1: x = %d, y = %d' % (x, y))        draw_rects.left_button_down = True        draw_rects.current_rect.tl = (x, y)    if draw_rects.left_button_down and event == cv2.EVENT_MOUSEMOVE:        # pick second point of rect and draw current rect        draw_rects.current_rect.br = draw_rects.shrink_point(x, y)        draw_rects.reset_image()        draw_rects.draw()        draw_rects.draw_current_rect()    if event == cv2.EVENT_LBUTTONUP:        # finish drawing current rect and append it to rects list        draw_rects.left_button_down = False        draw_rects.current_rect.br = draw_rects.shrink_point(x, y)        print('pt2: x = %d, y = %d' % (draw_rects.current_rect.br[0],                                       draw_rects.current_rect.br[1]))        draw_rects.current_rect.regularize()        draw_rects.append()    if (not draw_rects.left_button_down) and event == cv2.EVENT_RBUTTONDOWN:        # pop the last rect in rects list        draw_rects.pop()        draw_rects.reset_image()        draw_rects.draw()  if __name__ == '__main__':    #image = np.zeros((256, 256, 3), np.uint8)    image = cv2.imread("111.jpg")    draw_rects = DrawRects(image, (0, 255, 0), 2)    cv2.namedWindow(WIN_NAME, 0)    cv2.setMouseCallback(WIN_NAME, onmouse_draw_rect, draw_rects)    while True:        cv2.imshow(WIN_NAME, draw_rects.image_for_show)        key = cv2.waitKey(30)        if key == 27:  # ESC            break    cv2.destroyAllWindows()

运行效果

Python+OpenCV如何实现在图像上绘制矩形

补充

当然Python+OpenCV不仅能做到在图像上绘制任意大小矩形,还能实现鼠标点击图像时会显示其坐标值

下面是实现代码

import cv2import numpy as np img = cv2.imread("111.jpg")  # print img.shape def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):    if event == cv2.EVENT_LBUTTONDOWN:        xy = "%d,%d" % (x, y)        print        xy        cv2.circle(img, (x, y), 1, (255, 0, 0), thickness=-1)        cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,                    1.0, (255, 255, 255), thickness=1)        cv2.imshow("image", img)  cv2.namedWindow("image",cv2.WINDOW_KEEPRATIO)cv2.setMouseCallback("image", on_EVENT_LBUTTONDOWN)cv2.imshow("image", img) while (True):    try:        cv2.waitKey(100)    except Exception:        cv2.destroyWindow("image")        break cv2.waitKey(0)cv2.destroyAllWindow()

运行结果:

Python+OpenCV如何实现在图像上绘制矩形

看完了这篇文章,相信你对“Python+OpenCV如何实现在图像上绘制矩形”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python+OpenCV如何实现在图像上绘制矩形

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python+OpenCV如何实现在图像上绘制矩形

小编给大家分享一下Python+OpenCV如何实现在图像上绘制矩形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码import copyimport cv2import numpy as np WIN_NAME = d
2023-06-29

OpenCV如何实现绘制轮廓外接矩形

本篇内容介绍了“OpenCV如何实现绘制轮廓外接矩形”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.寻找轮廓apivoid cv::fin
2023-07-04

C++ opencv如何实现几何图形绘制

这篇“C++ opencv如何实现几何图形绘制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++ opencv如何实现几何
2023-06-30

Python OpenCV中如何进行图形绘制

这篇文章将为大家详细讲解有关Python OpenCV中如何进行图形绘制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。背景使用OpenCV进行图形绘制是一种必备的技能,在图像的任务中,不管是
2023-06-22

C#如何实现opencv截取旋转矩形区域图像

本篇内容主要讲解“C#如何实现opencv截取旋转矩形区域图像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#如何实现opencv截取旋转矩形区域图像”吧!前言:最近在工程中需要用到截取Rot
2023-06-07

Python OpenCV如何绘制各类几何图形

这篇文章将为大家详细讲解有关Python OpenCV如何绘制各类几何图形,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.绘制直线在OpenCV中,绘制直线需要获取直线的起点和终点坐标,调用cv2.li
2023-06-29

Python matplotlib如何实现图形绘制

本篇内容主要讲解“Python matplotlib如何实现图形绘制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python matplotlib如何实现图形绘制”吧!1. matplotli
2023-06-21

Python如果实现图形绘制

这篇文章主要介绍Python如果实现图形绘制,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、画第一个图形第一个图形从简单的开始。1.1 代码# importing the required moduleimport
2023-06-22

WPF如何实现绘制3D图形

今天小编给大家分享一下WPF如何实现绘制3D图形的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。关键概念视口视口指的是图像要展
2023-07-05

PHP中Grafika如何实现图形绘制

这篇文章主要介绍了PHP中Grafika如何实现图形绘制,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、绘制贝塞尔曲线贝塞尔曲线绘制,需要两个端点,一头一尾,还有两个控制点
2023-06-17

如何使用OpenCV与JVM实现矩阵处理图像

这篇文章给大家分享的是有关如何使用OpenCV与JVM实现矩阵处理图像的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。submat(int rowStart, int rowEnd, int colStart, i
2023-06-26

Qt如何实现实时鼠标绘制图形

小编给大家分享一下Qt如何实现实时鼠标绘制图形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!展示效果功能实现想要实现鼠标拖拽绘图的效果,离不开鼠标的三大事件:按下、移动、释放那么具体实现实时绘制矩形框的核心流程是什么呢?第
2023-06-29

基于C#如何实现在图片上绘制文字

本篇内容介绍了“基于C#如何实现在图片上绘制文字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果代码public partial clas
2023-07-04

CSS绘制:如何实现简单的图形效果

CSS绘制:如何实现简单的图形效果CSS作为前端开发的重要技术之一,除了样式布局外,还可以利用它绘制简单的图形效果。本文将介绍如何使用CSS来实现一些常见的图形效果,并提供具体的代码示例。一、实现圆形要实现一个简单的圆形效果,可以使用CSS
CSS绘制:如何实现简单的图形效果
2023-11-21

Python OpenCV如何实现图像傅里叶变换

这篇文章给大家分享的是有关Python OpenCV如何实现图像傅里叶变换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。二维离散傅里叶变换(DFT)对于二维图像处理,通常使用 x , y x, yx,y 表示离散
2023-06-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录