一、简介
在opencv基础上二次封装,包括 translation, rotation, resizing, skeletonization, and displaying Matplotlib images 等。
github地址: https://github.com/jrosebr1/imutils
二、使用
1. 安装
pip install imutils
查询opencv中的函数
可以使用关键词搜索opencv中的相应函数
import imutils imutils.find_functions("area") #output: 1. CC_STAT_AREA 2. INTER_AREA 3. contourArea 4. minAreaRect
2. 图像平移Translation
图像在x轴方向左右平移,y轴方向上下平移,
#向右平移25像素,向上平移75像素 translated = imutils.translate(image,25,-75)
3. 图像旋转Rotation
rotated = imutils.rotate(image,90)
4. 图像大小Resizing
改变图像大小,但保持原来图像的长宽比不变。
可以只单独设置width或者height;
resized = imutils.resize(image,width=300) resized = imutils.resize(image,height=300)
这个函数会根据图片的比例进行重新绘制大小,如果你的图片是200:200的图片比例,那么如果你使用resize函数的时候,resize(img,height=50,width=20) 那么最后修改的图像是已最小的那个数字对齐,也就是width=20,所以最后出来的图片大小是2020,而不是5020,或者50*50.
5. 骨架化Skeletonization
gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY) skeleton = imutils.skeletonize(gray, size=(3, 3)) cv2.imshow("Skeleton", skeleton)
6. 使用Matplotlib展示图片
opencv读取的图片格式为BGR,使用matplotlib显示的时候也是这个顺序,需要先将BGR转换为RGB才能正常显示,imutils提供了转换函数
plt.imshow(imutils.opencv2matplotlib(image))
7. URL转换为Image
image = imutils.url_to_image(url)
8. OpenCV版本
Example: print("Your OpenCV version: {}".format(cv2.__version__)) print("Are you using OpenCV 2.X? {}".format(imutils.is_cv2())) print("Are you using OpenCV 3.X? {}".format(imutils.is_cv3())) 输出: Your OpenCV version: 3.0.0 Are you using OpenCV 2.X? False Are you using OpenCV 3.X? True
9. 自动边缘检测Automatic Canny Edge Detection
gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY) edgeMap = imutils.auto_canny(gray) #源码 def auto_canny(image, sigma=0.33): # compute the median of the single channel pixel intensities v = np.median(image) # apply automatic Canny edge detection using the computed median lower = int(max(0, (1.0 - sigma) * v)) upper = int(min(255, (1.0 + sigma) * v)) edged = cv2.Canny(image, lower, upper) # return the edged image return edged
10. 透视变换
# author: Adrian Rosebrock # website: http://www.pyimagesearch.com # USAGE # BE SURE TO INSTALL 'imutils' PRIOR TO EXECUTING THIS COMMAND # python perspective_transform.py # import the necessary packages from imutils import perspective import numpy as np import cv2 # load the notecard code image, clone it, and initialize the 4 points # that correspond to the 4 corners of the notecard notecard = cv2.imread("../demo_images/notecard.png") clone = notecard.copy() pts = np.array([(73, 239), (356, 117), (475, 265), (187, 443)]) # loop over the points and draw them on the cloned image for (x, y) in pts: cv2.circle(clone, (x, y), 5, (0, 255, 0), -1) # apply the four point tranform to obtain a "birds eye view" of # the notecard warped = perspective.four_point_transform(notecard, pts) # show the original and warped images cv2.imshow("Original", clone) cv2.imshow("Warped", warped) cv2.waitKey(0)
11. 给cv2.findContours结果排序
# author: Adrian Rosebrock # website: http://www.pyimagesearch.com # USAGE # BE SURE TO INSTALL 'imutils' PRIOR TO EXECUTING THIS COMMAND # python sorting_contours.py # import the necessary packages from imutils import contours import imutils import cv2 # load the shapes image clone it, convert it to grayscale, and # detect edges in the image image = cv2.imread("../demo_images/shapes.png") orig = image.copy() gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) edged = imutils.auto_canny(gray) # find contours in the edge map cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) # loop over the (unsorted) contours and label them for (i, c) in enumerate(cnts): orig = contours.label_contour(orig, c, i, color=(240, 0, 159)) # show the original image cv2.imshow("Original", orig) # loop over the sorting methods for method in ("left-to-right", "right-to-left", "top-to-bottom", "bottom-to-top"): # sort the contours (cnts, boundingBoxes) = contours.sort_contours(cnts, method=method) clone = image.copy() # loop over the sorted contours and label them for (i, c) in enumerate(cnts): sortedImage = contours.label_contour(clone, c, i, color=(240, 0, 159)) # show the sorted contour image cv2.imshow(method, sortedImage) # wait for a keypress cv2.waitKey(0)
10. 返回图片列表
from imutils import paths for imagePath in paths.list_images("../demo_images"): print imagePath