opencv计算指定区域黑白像素占比

       如下在我们拿到二值化的图像之后,想要计算红框内黑白像素在该区域的占比。注意单通道的图像无法出现黑白以外的颜色。
opencv计算指定区域黑白像素占比_第1张图片
opencv计算指定区域黑白像素占比_第2张图片
opencv计算指定区域黑白像素占比_第3张图片

       上图为我们拿到的红色区域二值化之后的图像。我们通过遍历该区域所有像素来判断。若值为255则白色加一,值为0则黑色像素加一。二值化后,只有黑白两色,因此很好判断。

python的opencv代码:

import cv2
import  numpy as np

img=cv2.imread('Resources/tom.jpg')
#缩放

rows,cols,channels = img.shape

img=cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape

#转换hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([78,43,46])
upper_blue=np.array([124,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)

#这一步裁剪指定区域图片。
s = mask[30:200, 50:250] #y,x
#起始x,y坐标,终止x,y坐标,而非加上宽和高
# 和之前用到的cv2.boundingRect()函数定位法不同
cv2.rectangle(img,(50,30),(250,200),(0,0,255),3)
cv2.imshow('res',img)

cv2.imshow('ss',s)
#注意这里s已经是单通道,此时不返回通道值。
x,y= s.shape

bk = 0
wt = 0
#遍历二值图,为0则bk+1,否则wt+1
for i in range(x):
    for j in range(y):
        if s[i,j]==0:
            bk+=1
        else:
            wt+=1
rate1 = wt/(x*y)
rate2 = bk/(x*y)
#round()第二个值为保留几位有效小数。
print("白色占比:", round(rate1*100,2),'%')
print("黑色占比:", round(rate2*100,2),'%')

cv2.waitKey(0)

运行结果:
opencv计算指定区域黑白像素占比_第4张图片  第一个图为计算区域,可以看到黑白占比相加为100%。
  我发布的另一篇文章识别答题卡里,我曾提到另一个检测选项是否被填涂的方法——计算轮廓内黑白像素的比值,然后给出阈值过滤筛选。这次就给出了计算方法,感兴趣的可以自行替换一试。
   可以直接拿二值图来测试,前半部分二值化的操作可以跳过。
   **原文链接: opencv计算指定区域黑白像素占比**
  对python爬虫和opencv系列感兴趣的可以关注一下⬇⬇⬇欢迎大家来交流呀~
  微信公众号:滑稽研究所
opencv计算指定区域黑白像素占比_第5张图片

你可能感兴趣的:(opencv,opencv,计算机视觉,python,cv,边缘检测)