# -*- coding:utf-8 -*- import cv2 import numpy as np image = cv2.imread('table.png') # 灰度图 img=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 二值化 ret , thresh = cv2.threshold(img, 230, 255, cv2.THRESH_BINARY_INV) # cv2.findContours() 函数来查找物体轮廓 # cv2.RETR_EXTERNAL 只检测外轮廓 # cv2.CHAIN_APPROX_SIMPLE 压缩水平方向 ,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需要4个点来保存轮廓信息 # 返回两个值,一个是轮廓本身,一个是每条轮廓对应的属性 contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) dot=[] # 用来保存所有轮廓返回的坐标点。 for c in contours: # 找到边界坐标 min_list=[] # 保存单个轮廓的信息,x,y,w,h,area。 x,y 为起始点坐标 x, y, w, h = cv2.boundingRect(c) # 计算点集最外面的矩形边界 min_list.append(x) min_list.append(y) min_list.append(w) min_list.append(h) min_list.append(w*h) # 把轮廓面积也添加到 dot 中 dot.append(min_list) # 找出最大矩形的 x,y,w,h,area max_area=dot[0][4] # 把第一个矩形面积当作最大矩形面积 for inlist in dot: area=inlist[4] if area >= max_area: x=inlist[0] y=inlist[1] w=inlist[2] h=inlist[3] max_area=area # 在原图上画出最大的矩形 cv2.rectangle(image, (x, y), (x + w , y + h ), (0, 255, 0), 1) # cv2.namedWindow('img',cv2.WINDOW_NORMAL) # cv2.resizeWindow('img', 1000,900) #cv2.imshow('img',image) cv2.imwrite('big.jpg',image) cv2.waitKey(0)
原图1:
结果1:
原图2:
结果2:
# 截图 from PIL import Image img = Image.open('test.jpg') region = img.crop((x, y, x + w, y + h)) region.save('result.jpg')
结果1:
结果2:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)