【发布时间】:2020-10-09 03:31:34
【问题描述】:
我正在尝试将图像中的一些特定像素设置为黑色,这些图像是 tiff 格式,这需要我在各自的帧中分解它们,因此我的 tiff 图像有 50 个不同的帧。对于这样的任务,我通过访问给定位置的像素索引并简单地将它们的值设置为 0 来使用简单的值。例如:
img[10, 50] = 0
每次我尝试设置它们的像素时,图像都会立即变黄。
但是,如果我删除将像素值更改/设置为黑色的每一行,图像就会恢复正常。
这是我的代码:
from PIL import Image
%pylab inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = "myimage.tif"
path = "C:/Dataset/Face1" + image
plt.imshow(img)
img=mpimg.imread(path)
img[15, 60] = 0
img[15, 85] = 0
img[15, 105] = 0
img[35, 60] = 0
img[35, 85] = 0
img[35, 105] = 0
img[45, 60] = 0
img[43, 75] = 0
img[43, 92] = 0
img[43, 105] = 0
img[58, 55] = 0
img[65, 83] = 0
img[58, 110] = 0
img[75, 83] = 0
img[85, 75] = 0
img[85, 90] = 0
img[90 ,83] = 0
img[95, 60] = 0
img[99, 83] = 0
img[99, 103] = 0
我尝试使用 opencv2 以简单的方式标准化我的图像:
img1 = cv2.imread('image.tif', cv2.IMREAD_GRAYSCALE)
final_img = cv2.normalize(img1, img1, 0, 255, cv2.NORM_MINMAX)
得到了这个:
我如何分解图像
from PIL import Image
import matplotlib.pyplot as plt
imagepath = "face1.tif"
path = "C:/Users/images/" + imagepath
img = Image.open(path)
for i in range(50):
try:
img.seek(i)
img.save('C:/Users/images/face1/%s.tif'%(i,))
except EOFError:
break
我想要做的是标准化图像,当我打印最亮像素之一的值时,输出约为 8353。另外,将其转换为 8 位图像,以便我可以在 matplotlib 上查看。
【问题讨论】:
-
有什么好的方法可以做到这一点?我想确保我的图像是 8 位整数以及将它们的信息标准化为 0,255。在opencv中它会更容易,我如何在matplotlib中做到这一点?
-
@cgohlke 我试过:'imgplot = plt.imshow(img, vmin = 0, vmax= 255)'。还是黄色的
-
你没有让任何人轻松帮助你。你说你有一个 TIFF 但不分享它。你说它有多个框架,但你的代码没有反映这一点。您提供了一个代码块,它使用
matplotlib来读取它,另一个基于 OpenCV - 不知道为什么。目前,我只能猜测您的图像是灰度图像,但您使用的是 viridis 颜色图,因此您可能需要在绘图命令中添加cmap='gray'。 -
您可以使用 Dropbox、Google Drive 或类似工具。谢谢。
-
好的,我已经用 Dropbox 链接和用于分解的代码编辑了问题
标签: python python-3.x image opencv normalization