-
读图
img = cv2.imread(“2233.png”)
i所在目录图片的名字 o numpy.ndarray -
备份图
src = img.copy()
o原格式 -
图变灰gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
-
去噪点,双边滤波
blurred = cv2.bilateralFilter(gray, 2, 200, 200) -
扣边缘图
-edged = cv2.Canny(blurred, 25, 200) -
膨胀画像
edged = cv2.dilate(edged, cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))) -
找图中轮廓
-
cnts, _ =cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
-
求面积
key=cv2.contourArea -
得周长
peri = cv2.arcLength(c, True) -
在图上画连线图
cv2.polylines(img, [docCnt], True, (0, 255, 0), 3) -
生成透视矩阵
M = cv2.getPerspectiveTransform(pts1, pts2)
-图片透视转换
dst = cv2.warpPerspective(img, M, (x, y))
I原图 透视矩阵 坐标?O扶正的图片 -
变灰度图
dst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) -
自适应阈值
th = cv2.adaptiveThreshold(dst, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)
超亮度阈值的区域变暗或亮,阈值自适应局部亮度 -
显示图(按键控制:ESC键退出,r键旋转,s键保存图片 )
def show(img):
"""
绘图
"""
global x
global y
cv2.imshow('Scanner', img)
k = cv2.waitKey(0)
if k == 27: # 按ESC退出
cv2.destroyAllWindows()
elif k == ord('r'): # 按r旋转结果
init = [[0, 0], [x, 0], [x, y], [0, y]]
dstp = init[1:] + init[:1]
img = transform(img, init, dstp)
show(img)
elif k == ord('s'): # 按s保存图片
cv2.imwrite('Scanned5.png')
- 创建可调整的窗口
cv2.namedWindow(‘窗口名’, cv2.WINDOW_NORMAL)
一般后接显示的图,如上程序