2017-10-05 171 views
0

我正在计算灰度图像的直方图,我想将灰度像素范围转换为黑色。我使用下面的代码来检索histogram.`将所有灰度像素值转换为黑色

image = cv2.imread('./images/test/image_5352.jpg') 
cv2.imshow("image", image) 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
cv2.imshow("gray", gray) 

hist = cv2.calcHist([gray], [0], None, [256], [0, 256]) 
plt.figure() 
plt.title("Grayscale Histogram") 
plt.xlabel("Bins") 
plt.ylabel("# of Pixels") 
plt.plot(hist) 
plt.xlim([0, 256]) 
key = cv2.waitKey(0) 
cv2.destroyAllWindows() 

Histogram of the image

例如,我想所有的像素转换与黑50的价值。

+0

很肯定这是你想要的,如果是,随意接听与细节这个问题的http://answers.opencv .org/question/97416 /替换一个颜色范围与一个特定的颜色在python/ – GPPK

+0

我相信opencv返回numpy数组的图像。你可以使用布尔索引来操作图像:'gray [gray == 50] = 0'应该可以工作。 – umutto

+0

49像素怎么样?还有51? –

回答

0

也许图像阈值是你追求的...

如果像素值大于阈值时,它被分配一个值(可以是白色的),否则它被赋予另一个值(可能是黑色的)。

cv2.threshold(img,127,255,cv2.THRESH_BINARY)

上面的代码是在C++中,但足够容易转换。第一个参数是所讨论的图像,第二个是阈值,第三个是如果它超过阈值则指定任何像素值,第四个是阈值类型,其中有多个:

enter image description here

对于进一步阅读:see here

+0

感谢您的答案,但我不想将所有像素更改为黑色和白色只是想改变一定范围内的一些像素 –

+0

啊好的,我错过了。你不能只用广播吗? https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html – Sam