最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+OpenCV實(shí)現(xiàn)在圖像上繪制矩形

 更新時(shí)間:2022年03月21日 16:41:35   作者:Vertira  
這篇文章主要介紹了如何利用Python和OpenCV實(shí)現(xiàn)在圖像上繪制任意大小的矩形,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下

話不多說,直接上代碼

import copy
import cv2
import 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()

運(yùn)行效果

補(bǔ)充

當(dāng)然Python+OpenCV不僅能做到在圖像上繪制任意大小矩形,還能實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊圖像時(shí)會(huì)顯示其坐標(biāo)值

下面是實(shí)現(xiàn)代碼

import cv2
import 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()

運(yùn)行結(jié)果:

以上就是Python+OpenCV實(shí)現(xiàn)在圖像上繪制矩形的詳細(xì)內(nèi)容,更多關(guān)于Python OpenCV的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于python3安裝pip及requests庫的導(dǎo)入問題

    關(guān)于python3安裝pip及requests庫的導(dǎo)入問題

    小編最近快畢業(yè)了,閑著無事學(xué)習(xí)下python的內(nèi)容在學(xué)習(xí)到requsets庫的導(dǎo)入問題時(shí)遇到一些問題,通過查找相關(guān)資料問題順利解決,今天小編把問題解決思路及注意事項(xiàng)分享給大家供大家參考學(xué)習(xí)
    2021-05-05
  • Ubuntu16.04/樹莓派Python3+opencv配置教程(分享)

    Ubuntu16.04/樹莓派Python3+opencv配置教程(分享)

    下面小編就為大家分享一篇Ubuntu16.04/樹莓派Python3+opencv配置教程。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 使用PyTorch/TensorFlow搭建簡單全連接神經(jīng)網(wǎng)絡(luò)

    使用PyTorch/TensorFlow搭建簡單全連接神經(jīng)網(wǎng)絡(luò)

    在本篇博客中,我們將介紹如何使用兩大深度學(xué)習(xí)框架——PyTorch 和 TensorFlow,構(gòu)建一個(gè)簡單的全連接神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)包含輸入層、一個(gè)隱藏層和輸出層,適合初學(xué)者理解神經(jīng)網(wǎng)絡(luò)的基本構(gòu)建模塊及訓(xùn)練流程,需要的朋友可以參考下
    2025-02-02
  • python dlib人臉識(shí)別代碼實(shí)例

    python dlib人臉識(shí)別代碼實(shí)例

    這篇文章主要介紹了python dlib人臉識(shí)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 基于Python實(shí)現(xiàn)一個(gè)圖片壓縮工具

    基于Python實(shí)現(xiàn)一個(gè)圖片壓縮工具

    圖片壓縮是在保持圖像質(zhì)量的同時(shí)減小圖像文件大小的過程,本文將學(xué)習(xí)如何使用Python來實(shí)現(xiàn)一個(gè)簡單但功能強(qiáng)大的圖片壓縮工具,以及如何在不同情境下進(jìn)行圖片壓縮,希望對(duì)大家有所幫助
    2024-01-01
  • python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

    python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

    這篇文章主要為大家介紹了python爬蟲框架Scrapy的基本應(yīng)用學(xué)習(xí)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python實(shí)現(xiàn)采集網(wǎng)站ip代理并檢測(cè)是否可用

    Python實(shí)現(xiàn)采集網(wǎng)站ip代理并檢測(cè)是否可用

    這篇文章主要介紹了如何利用Python爬蟲實(shí)現(xiàn)采集網(wǎng)站ip代理,并檢測(cè)IP代理是否可用。文中的示例代碼講解詳細(xì),感興趣的可以試一試
    2022-01-01
  • django將數(shù)組傳遞給前臺(tái)模板的方法

    django將數(shù)組傳遞給前臺(tái)模板的方法

    今天小編就為大家分享一篇django將數(shù)組傳遞給前臺(tái)模板的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 使用python Django做網(wǎng)頁

    使用python Django做網(wǎng)頁

    python Django網(wǎng)頁的四個(gè)步驟,很簡單的圖文學(xué)習(xí)。學(xué)習(xí)python Django做網(wǎng)頁的第一步。
    2013-11-11
  • django 中QuerySet特性功能詳解

    django 中QuerySet特性功能詳解

    這篇文章主要介紹了django 中QuerySet特性功能詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

和硕县| 盘山县| 周口市| 浙江省| 龙陵县| 门源| 齐齐哈尔市| 乌审旗| 宿州市| 抚州市| 方城县| 孝昌县| 平乐县| 金溪县| 疏附县| 文成县| 岢岚县| 永昌县| 合江县| 津市市| 大余县| 广西| 宝兴县| 安阳市| 南丰县| 昌吉市| 涿州市| 平原县| 罗平县| 阜城县| 平原县| 邵阳县| 凭祥市| 盐池县| 旌德县| 石阡县| 抚松县| 茂名市| 碌曲县| 井陉县| 霍城县|