python有一个非常好用且重要的支持功能就是图像处理,而最近有小伙伴说它想使用python将图像之中的圆形物体范围给截取出来。那么这一篇文章正好就是来讲解一下,python是怎么识别处图像中的圆形并且将其截取出来的,感兴趣和想学习的话就往下看看吧。
1.那么python之中这种对图片进行处理而不是绘图操作,使用opencv第三方库是比较方便和简单的。导入软件包之后将图像读取进来再转为灰度图,这样之后才可以识别圆形物体轮廓。然后还需要将其进行二值化以及反二值化操作,代码如下所示:
import cv2 import numpy as np image = cv2.imread('F:\Sia303-336.jpg') img=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ret , thresh = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) dot=[]
2.在上面代码示例之中定义了一个用来保存轮廓坐标点的空列表,因为圆形不像矩阵一样可以通过顶端四个坐标点来选定一片区域,它需要通过准确无误的坐标并将其连接起来得到指定图像区域,所以这一步就是for循环迭代来保存圆形轮廓坐标,代码示例如下所示:
for c in contours: min_list=[] 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.append(min_list)
3.到这一步实际上就是以及将图像圆形区域的像素点都获取到了,而现在所需要做的事情是扩展一下矩形范围。这是因为图像上圆形轮廓灰度值高低差异并不能完全保证区域完整,所以需要扩展一些矩形范围来使得圆形图像尽可能存在于其中。
然后使用切片方式获取到指定坐标范围内的图像,再通过方法将去保存起来即可,详细代码示例如下所示:
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 x0=x-int(new_w/2) y0=y-int(new_w/2) w=w+new_w h=h+new_w crop = image[y0:y0+h, x0:x0+w] cv2.imwrite("crop.jpg",crop)
以上就是关于“Python如何截取图像中的圆形?Python图像圆形物体怎么截取”的全部内容了,希望对你有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。