如何创建图像的阈值?
How do I create a threshold of an image?
据我了解,阈值化是一个阶跃函数,这意味着像素值在每一步都被四舍五入。例如。像素值 33 将四舍五入为 32(假设阈值为 32)。在我的代码中,我试图完成阈值处理,但我认为我没有实现它。有人可以指导我我所缺少的吗?
import pylab as plt
import matplotlib.image as mpimg
import numpy as np
img = np.uint8(mpimg.imread("abby.jpg"))
img = np.uint8((0.2126* img[:,:,0]) + \
np.uint8(0.7152 * img[:,:,1]) +\
np.uint8(0.0722 * img[:,:,2]))
threshold = 128
for row in img: ## trying to loop through to find if each image pixel > threshold
for col in row:
if col > threshold:
col = threshold
else:
col = 0
plt.imshow(img,cmap=plt.cm.gray)
plt.show()
检查您的 for
循环。可能是你在使用 for 循环进行迭代时犯了错误。
if col > threshold:
col = threshold
这个threshold应该是255,也就是threshold的概念
谢谢
您不是将阈值写入图像文件,而是写入局部变量 c。要读取和写入 numpy 数组,请阅读官方文档 here.
试试下面的代码:-
import pylab as plt
import matplotlib.image as mpimg
import numpy as np
from PIL import Image
img = np.uint8(mpimg.imread("abby.jpg"))
img = np.uint8((0.2126* img[:,:,0]) + \
np.uint8(0.7152 * img[:,:,1]) +\
np.uint8(0.0722 * img[:,:,2]))
threshold = 64
it = np.nditer(img, flags=['multi_index'], op_flags=['writeonly'])
while not it.finished:
if it[0] > threshold:
it[0] = threshold
else:
it[0] = 0
it.iternext()
im = Image.fromarray(img)
im.save("output.jpeg")
plt.imshow(img,cmap=plt.cm.gray)
plt.show()
输出图像
注意:注意 matplotlib 如何显示输出图像。它以纯白色显示强度 64,这是不正确的表示。
据我了解,阈值化是一个阶跃函数,这意味着像素值在每一步都被四舍五入。例如。像素值 33 将四舍五入为 32(假设阈值为 32)。在我的代码中,我试图完成阈值处理,但我认为我没有实现它。有人可以指导我我所缺少的吗?
import pylab as plt
import matplotlib.image as mpimg
import numpy as np
img = np.uint8(mpimg.imread("abby.jpg"))
img = np.uint8((0.2126* img[:,:,0]) + \
np.uint8(0.7152 * img[:,:,1]) +\
np.uint8(0.0722 * img[:,:,2]))
threshold = 128
for row in img: ## trying to loop through to find if each image pixel > threshold
for col in row:
if col > threshold:
col = threshold
else:
col = 0
plt.imshow(img,cmap=plt.cm.gray)
plt.show()
检查您的 for
循环。可能是你在使用 for 循环进行迭代时犯了错误。
if col > threshold:
col = threshold
这个threshold应该是255,也就是threshold的概念
谢谢
您不是将阈值写入图像文件,而是写入局部变量 c。要读取和写入 numpy 数组,请阅读官方文档 here.
试试下面的代码:-
import pylab as plt
import matplotlib.image as mpimg
import numpy as np
from PIL import Image
img = np.uint8(mpimg.imread("abby.jpg"))
img = np.uint8((0.2126* img[:,:,0]) + \
np.uint8(0.7152 * img[:,:,1]) +\
np.uint8(0.0722 * img[:,:,2]))
threshold = 64
it = np.nditer(img, flags=['multi_index'], op_flags=['writeonly'])
while not it.finished:
if it[0] > threshold:
it[0] = threshold
else:
it[0] = 0
it.iternext()
im = Image.fromarray(img)
im.save("output.jpeg")
plt.imshow(img,cmap=plt.cm.gray)
plt.show()
输出图像
注意:注意 matplotlib 如何显示输出图像。它以纯白色显示强度 64,这是不正确的表示。