个性化阅读
专注于IT技术分析

使用Python的OpenCV绘制矩形并提取对象

OpenCV的是一个开放源代码的计算机视觉和机器学习软件库。借助它可以完成各种图像处理操作, 例如处理图像和应用大量滤镜。它广泛用于对象检测, 面部检测和其他图像处理任务。

让我们看看如何在图像上绘制矩形并使用OpenCV提取对象。

# Python program to extract rectangular
# Shape using OpenCV in Python3
import cv2
import numpy as np
  
drawing = False     # true if mouse is pressed
mode = True         # if True, draw rectangle.
ix, iy = - 1 , - 1
  
# mouse callback function
def draw_circle(event, x, y, flags, param):
     global ix, iy, drawing, mode
      
     if event = = cv2.EVENT_LBUTTONDOWN:
         drawing = True
         ix, iy = x, y
      
     elif event = = cv2.EVENT_MOUSEMOVE:
         if drawing = = True :
             if mode = = True :
                 cv2.rectangle(img, (ix, iy), (x, y), ( 0 , 255 , 0 ), 3 )
                 a = x
                 b = y
                 if a ! = x | b ! = y:
                     cv2.rectangle(img, (ix, iy), (x, y), ( 0 , 0 , 0 ), - 1 )
             else :
                 cv2.circle(img, (x, y), 5 , ( 0 , 0 , 255 ), - 1 )
      
     elif event = = cv2.EVENT_LBUTTONUP:
         drawing = False
         if mode = = True :
             cv2.rectangle(img, (ix, iy), (x, y), ( 0 , 255 , 0 ), 2 )
      
         else :
             cv2.circle(img, (x, y), 5 , ( 0 , 0 , 255 ), - 1 )
      
img = np.zeros(( 512 , 512 , 3 ), np.uint8)
cv2.namedWindow( 'image' )
cv2.setMouseCallback( 'image' , draw_circle)
  
while ( 1 ):
     cv2.imshow( 'image' , img)
     k = cv2.waitKey( 1 ) & 0xFF
     if k = = ord ( 'm' ):
         mode = not mode
     elif k = = 27 :
         break
  
cv2.destroyAllWindows()

输出如下:

使用Python的OpenCV绘制矩形并提取对象1

上面的代码仅适用于黑色背景图像。但是可以在任何图像上绘制矩形。我们可以编写一个程序, 使我们能够选择图像中的所需部分并提取所选部分。任务包括以下内容–

  • 在任何图像上绘制形状
  • 重新选择提取部分, 以防选择错误
  • 从图像中提取特定对象
# Write Python code here
# import the necessary packages
import cv2
import argparse
  
# now let's initialize the list of reference point
ref_point = []
crop = False
  
def shape_selection(event, x, y, flags, param):
     # grab references to the global variables
     global ref_point, crop
  
     # if the left mouse button was clicked, record the starting
     # (x, y) coordinates and indicate that cropping is being performed
     if event = = cv2.EVENT_LBUTTONDOWN:
         ref_point = [(x, y)]
  
     # check to see if the left mouse button was released
     elif event = = cv2.EVENT_LBUTTONUP:
         # record the ending (x, y) coordinates and indicate that
         # the cropping operation is finished
         ref_point.append((x, y))
  
         # draw a rectangle around the region of interest
         cv2.rectangle(image, ref_point[ 0 ], ref_point[ 1 ], ( 0 , 255 , 0 ), 2 )
         cv2.imshow( "image" , image)
  
  
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument( "-i" , "--image" , required = True , help = "Path to the image" )
args = vars (ap.parse_args())
  
# load the image, clone it, and setup the mouse callback function
image = cv2.imread(args[ "image" ])
clone = image.copy()
cv2.namedWindow( "image" )
cv2.setMouseCallback( "image" , shape_selection)
  
  
# keep looping until the 'q' key is pressed
while True :
     # display the image and wait for a keypress
     cv2.imshow( "image" , image)
     key = cv2.waitKey( 1 ) & 0xFF
  
     # press 'r' to reset the window
     if key = = ord ( "r" ):
         image = clone.copy()
  
     # if the 'c' key is pressed, break from the loop
     elif key = = ord ( "c" ):
         break
  
if len (ref_point) = = 2 :
     crop_img = clone[ref_point[ 0 ][ 1 ]:ref_point[ 1 ][ 1 ], ref_point[ 0 ][ 0 ]:
                                                            ref_point[ 1 ][ 0 ]]
     cv2.imshow( "crop_img" , crop_img)
     cv2.waitKey( 0 )
  
# close all open windows
cv2.destroyAllWindows()

运行:将文件另存为capture_events.py为了进行测试, 请选择位于同一目录中的演示图片。现在, 执行以下命令–

python capture_events.py --image demo.jpg

输出如下:首先从图像中选择所需的部分。此外, 我们可以按编程时按” r”来删除错误的选择, 以进行新的正确选择。

使用Python的OpenCV绘制矩形并提取对象2

图:选择的部分

现在, 在选择了上述合适的选项后, 只需按编程按” c”提取即可。

无花果:切部分

使用Python的OpenCV绘制矩形并提取对象3

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


赞(0) 打赏
未经允许不得转载:srcmini » 使用Python的OpenCV绘制矩形并提取对象
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

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

微信扫一扫打赏