我使用的是来自numpy的ndarray来表示灰度图像。我试图改变一些像素值要么黑色或白色取决于阈值。第一次实施如下:
bwImage = image #ndArray
for h in range(image.shape[0]):
for w in range(image.shape[1]):
if image[h][w] > threshold:
bwImage[h][w] = 0
else:
bwImage[h][w] = 255
cv2.imwrite('testImg.jpg', bwImage)
当我将数组写入测试mg.jpg我看到了原图。然后,我遍历ndArray以检查值是否确实发生了更改。你知道吗
bwImage = image
for h in range(image.shape[0]):
for w in range(image.shape[1]):
if image[h][w] > threshold:
bwImage[h][w] = 0
else:
bwImage[h][w] = 255
#why does this have to be here to convert it to BW?
for h in range(image.shape[0]):
for w in range(image.shape[1]):
print image[h][w]
cv2.imwrite('testImg.jpg', bwImage)
然后将图像保存为黑白。为什么?你知道吗
我还试着做了以下工作:
image[image <= threshold] = 255
image[image > threshold] = 0
cv2.imwrite('testImg.jpg', bwImage)
根据首先使用的语句确定图像的保存是完全黑色还是白色。有什么想法吗?你知道吗
方法1
我尝试了没有print语句的第一段代码,它运行得很好(使用cv2版本3.0.0,numpy 1.9.2)。但有两件事需要注意
bwImage = image
不复制映像,它只是创建另一个指向映像的指针->;对bwImage
的所有修改都在初始image
的位置上完成方法2
这里的问题是,因为您正在原地执行反转阈值,所以您的第一个赋值将所有小于阈值的值设置为255。然后,您的第二个赋值将超过阈值(现在包括所有内容)的所有值赋给black。你知道吗
如果要执行非反转阈值,只需切换运算符即可完成:
如果要像方法1中那样执行反转阈值,则必须复制图像,然后可以将原始图像用作遮罩,而不破坏原始像素信息:
相关问题 更多 >
编程相关推荐