我正在处理具有形状的图像,并且试图计算具有1个孔的对象和具有2个孔的对象.
我找到了有关的信息,但是它在MATLAB Segment out those objects that have holes in it中
他们使用了Euler特性,我知道在Python中存在skimage库,但是我不能使用它.
我也找到了一些代码,但我听不懂. http://www.cis.rit.edu/class/simg782/homework/hw3/hw3solutions.pdf第16.页
PRO hw3 4,A,LA,LC,count;Find all the holesAc=A EQ 0LC=label region(Ac,/ALL);Construct an array with the holes filled inAfill=(A GT 0) OR (LC GT 1);display the arrayssa=size(A,/dim)window,/free,xsize=sa[0],ysize=sa[1]tvlct,rr,gg,bb,/gettek colorTV,Afillwindow,ysize=sa[1]TV,LC;Count the objects with holes. First we;find all the objects and then match up;the object labels and the hole labels.LA=label region(Afill)window,LAha=histogram(LA)ia=where(ha ge 0)print,format=’("Objects",3x,"Count",/,(i2,5x,i7))’,$[transpose(ia),transpose(ha[ia])];Each element of ia corresponds to a filled;object. Object k is labeled ia[k]. For each;object that is not background,;determine whether it has holes.c=0printprint,"k ia[k] N C"For k=1,n elements(ia)-1 DO BEGINB=bytarr(sa[0],sa[1]); Make an array with one objectik=Where(LA eq ia[k]); ;Fill in the objectIF MIN(ik) GE 0 THEN B[ik]=1;Now see if any of the object pixels match the;hole image LC. Counts if one or more holes.IF MAX(B AND (LC GT 0)) GT 0 THEN c++print,[k,ia[k],n elements(ik),c],format=’(I2,1x,I2,I5,2x,I1)’ENDPrint,’Number of objects with one or more holes=’,counttvlct,bbENDIDL> hw3 4,count
想法是计算具有1个孔的对象和具有2个孔的对象,并突出显示其边缘.
“一个孔的对象数:2”
“带有两个孔的对象数:4”
这是我所拥有的,我使用一个简单的cv2.HoughCircles做到了:
最佳答案Contour Hierarchy可用于根据对象的孔数对对象进行计数.想象一下,您有100个空的各种大小的盒子,从一个大冰箱盒到一个小首饰盒.您要存储所有100个盒子,因此将一些盒子放在其他较大的盒子中.您还希望以后能够找到这些框,因此可以保留其中一个框的列表.等高线的工作方式相同,此列表称为层次结构.查找轮廓和层次结构:
img = cv2.imread('/home/stephen/Desktop/test.png',0)_,contours,hIErarchy = cv2.findContours(img,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
接下来,遍历每个轮廓以查找其中是否有轮廓
max_num = np.amax(hIErarchy) +1for c,h in zip(contours,hIErarchy[0]): # If there is at least one interior contour,find out how many there are if h[2] != -1: # Make sure it's not the 'zero' contour if h[0] == -1: num_interior_contours = max_num - h[2] else: num_interior_contours = h[0]-h[2] else: num_interior_contours = 0
绘制或计算内部具有其他轮廓的轮廓的数量:
if num_interior_contours == 1: cv2.drawContours(img_color,[c],-1,(255,255),2)# Outline the contour in green if there are two holes.if num_interior_contours == 2: cv2.drawContours(img_color,(0,255,0),2)
总结 以上是内存溢出为你收集整理的python-如何根据对象的孔数计算对象 全部内容,希望文章能够帮你解决python-如何根据对象的孔数计算对象 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)