如何找到使用grabcut opencv

时间:2018-01-13 20:24:50

标签: python opencv matplotlib

我使用图像上的抓取来执行前景提取。现在,我想计算得到的图像前景部分的面积。

我认为我可以做到这一点的一种方法是通过阈值处理图像,即前景变为白色,背景变为黑色。然后通过计算白色像素的数量 -

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg')

mask = np.zeros(img.shape[:2],np.uint8)

bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)

rect = (1200,1050,1950,1250)

#applying grabcut
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:,:,np.newaxis]

#thresholding
cvimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(cvimg,0,255,cv2.THRESH_BINARY)

count = cv2.countNonZero(thresh)

print("White " , count)

cv2.imshow("image",thresh)
plt.imshow(img)
plt.colorbar()
plt.show()

但我怀疑准确性为否。当图像分辨率改变时,像素会改变。如何找到所有图像的通用测量单位的图像前景区域?还有其他简单合适的方法吗?

感谢您的帮助...

0 个答案:

没有答案