Python 使用OpenCV计算图像中的黑白像素数
我是python新手,非常感谢您的帮助 我试图从这张图像中计算黑色像素的数量(0,0,0)和连续值,即(1,1,1),(2,2,2),(3,3,3),所有这些都达到(255255)。因此,代码将打印出如下答案:Python 使用OpenCV计算图像中的黑白像素数,python,numpy,opencv,image-processing,Python,Numpy,Opencv,Image Processing,我是python新手,非常感谢您的帮助 我试图从这张图像中计算黑色像素的数量(0,0,0)和连续值,即(1,1,1),(2,2,2),(3,3,3),所有这些都达到(255255)。因此,代码将打印出如下答案: (0,0,0) = 10 pixels (1,1,1) = 5 pixels (2,2,2) = 8 pixels etc. 这是我在网上找到的查找蓝色像素的代码,但我不想设置上下边界。我完全不知道该怎么做,请帮忙 import cv2 import numpy as np img
(0,0,0) = 10 pixels
(1,1,1) = 5 pixels
(2,2,2) = 8 pixels
etc.
这是我在网上找到的查找蓝色像素的代码,但我不想设置上下边界。我完全不知道该怎么做,请帮忙
import cv2
import numpy as np
img = cv2.imread("multi.png")
BLUE_MIN = np.array([0, 0, 200], np.uint8)
BLUE_MAX = np.array([50, 50, 255], np.uint8)
dst = cv2.inRange(img, BLUE_MIN, BLUE_MAX)
no_blue = cv2.countNonZero(dst)
print('The number of blue pixels is: ' + str(no_blue))
cv2.namedWindow("opencv")
cv2.imshow("opencv",img)
cv2.waitKey(0)
印刷品:
(3,3,3): 7477 pixels
(6,6,6): 5343 pixels
(8,8,8): 4790 pixels
(11,11,11): 4290 pixels
(13,13,13): 3681 pixels
(16,16,16): 3605 pixels
(19,19,19): 2742 pixels
(21,21,21): 2984 pixels
(26,26,26): 2366 pixels
(29,29,29): 2149 pixels
(32,32,32): 2460 pixels
...
(3,3,3):7477像素
(6,6,6):5343像素
(8,8,8):4790像素
(11,11,11):4290像素
(13,13,13):3681像素
(16,16,16):3605像素
(19,19,19):2742像素
(21,21,21):2984像素
(26,26,26):2366像素
(29,29,29):2149像素
(32,32,32):2460像素
...
使用
void
视图和
基本上,
pixels[idx]
是所有唯一像素的数组,count
是图像中每个像素的数量。我忘了他们用一个axis
参数更新了np.unique
,这样你就不再需要void
查看hack了。@DanielF看起来还是个不错的把戏,我不知道!不确定是否真的需要它,大多数np
函数都有一个axis
参数
colors, counts = np.unique(img.reshape(-1, 3), axis=0, return_counts=True)
for color, count in zip(colors, counts):
print("{} = {} pixels".format(color, count))
[1 1 0] = 6977 pixels
[3 3 3] = 7477 pixels
[6 6 6] = 5343 pixels
[8 8 8] = 4790 pixels
[11 11 11] = 4290 pixels
[13 13 13] = 3681 pixels
[16 16 16] = 3605 pixels
[19 19 19] = 2742 pixels
[21 21 21] = 2984 pixels
[...]
def vview(a): #based on @jaime's answer: https://stackoverflow.com/a/16973510/4427777
return np.ascontiguousarray(a).view(np.dtype((np.void, a.dtype.itemsize * a.shape[1])))
pixels = = img.reshape(-1,3)
_, idx, count = np.unique(vview(pixels), return_index = True, return_counts = True)
print np.c_[pixels[idx], count[:, None]]
colors, counts = np.unique(img.reshape(-1, 3), axis=0, return_counts=True)
for color, count in zip(colors, counts):
print("{} = {} pixels".format(color, count))
[1 1 0] = 6977 pixels
[3 3 3] = 7477 pixels
[6 6 6] = 5343 pixels
[8 8 8] = 4790 pixels
[11 11 11] = 4290 pixels
[13 13 13] = 3681 pixels
[16 16 16] = 3605 pixels
[19 19 19] = 2742 pixels
[21 21 21] = 2984 pixels
[...]