OpenCV的是一个开放源代码的计算机视觉和机器学习软件库。借助它可以完成各种图像处理操作, 例如处理图像和应用大量滤镜。它广泛用于对象检测, 面部检测和其他图像处理任务。
让我们看看如何在图像上绘制矩形并使用OpenCV提取对象。
# Python program to extract rectangular
# Shape using OpenCV in Python3
import cv2
import numpy as npdrawing = 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, modeif event = = cv2.EVENT_LBUTTONDOWN:
drawing = True
ix, iy = x, yelif 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 :
breakcv2.destroyAllWindows()
【使用Python的OpenCV绘制矩形并提取对象】输出如下:
文章图片
上面的代码仅适用于黑色背景图像。但是可以在任何图像上绘制矩形。我们可以编写一个程序, 使我们能够选择图像中的所需部分并提取所选部分。任务包括以下内容–
- 在任何图像上绘制形状
- 重新选择提取部分, 以防选择错误
- 从图像中提取特定对象
# Write Python code here
# import the necessary packages
import cv2
import argparse# now let's initialize the list of reference point
ref_point = []
crop = Falsedef 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" ):
breakif 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” 来删除错误的选择, 以进行新的正确选择。
文章图片
图:选择的部分
现在, 在选择了上述合适的选项后, 只需按编程按” c” 提取即可。
无花果:切部分
文章图片
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Python数据结构S3(字符串、列表、元组、迭代)
- Python使用OpenCV对彩色图像进行去噪
- Python使用OpenCV使用多个图像创建视频
- 使用OpenCV进行图像翻译|Python
- 使用Python中的形态学操作进行图像分割
- 使用OpenCV实现图像金字塔示例|Python
- 冬奥快结束了还没有抢到冰墩墩(程序员一招让你不用排队不用愁!)
- PHP 基于 SW-X 框架,搭建高性能API架构
- 北亚数据恢复NTFS文件系统误操作导致raid5阵列中的分区被格式化的逆向操作服务器数据恢复方法