Python+OpenCV如何实现在图像上绘制矩形
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下Python+OpenCV如何实现在图像上绘制矩形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码import copyimport cv2import nump
千家信息网最后更新 2026年11月02日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不仅能做到在图像上绘制任意大小矩形,还能实现鼠标点击图像时会显示其坐标值
下面是实现代码
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如何实现在图像上绘制矩形"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
图像
矩形
代码
篇文章
运行
大小
完了
效果
更多
标值
知识
结果
行业
资讯
资讯频道
频道
鼠标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技有限公司
互联网科技巨头监管
腾讯阿里互联网科技
关于新基建和互联网科技
互联网金融 科技金融
易通互联网络科技有限公司
互联网科技论坛
衡水科技产业互联网平台
互联网 科技馆
互联网系的金融科技公司
花神(南京)互联网科技有限公司
互联网科技和法律行业
佛山市拉法互联网科技有限公司
爱医互联网络科技
无锡工业互联网科技有限公司
杭州披云加互联网科技有限公司
中天科技中国工业互联网
江苏互联网智能科技软件
互联网科技快讯热点
互联网科技手抄报图片
工业互联网科技新基建
互联网科技卖菜
中资互联网科技
广州互联网络科技有限公司
兼蜜互联网科技
互联网科技生活的内容
互联网 科技馆
互联网科技公司的市场部门
岳阳华臻互联网科技有限公司
天津腾达互联网科技有限公司