【问题标题】:trying to convert a grayscale image to binary, hope anyone can help me试图将灰度图像转换为二进制,希望任何人都可以帮助我
【发布时间】:2020-12-24 15:43:28
【问题描述】:

我有一个来自热像仪的文本文件,我用 opencv python 将它作为图像读取,它可以工作,然后我将它转换为灰度图像,它也可以工作!所以我可以看到图像中的人,问题是当我将其转换为二进制时,我得到一个空白的黑色图像,我需要在人脸周围绘制轮廓。所以我想知道可能是什么问题。 提示:文本文件充满了温度值,当我阅读它时,它会查看整个人,然后我对文本文件进行阈值处理以使值介于 32.0 和 37.0 之间,以便我只显示面部区域并且工作正常直到我尝试将其转换为二进制形式。 提前致谢。

drive.google.com/file/d/1KgHmPAwcL_uPzVxwkigcQgCsY3jFjx8T/... #链接到文件

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
import os

text=np.loadtxt('1_thermal.txt') #the text file of the image
text[text < 32.0]=0 #threshholding to plot and save only the face 
text[text > 37.0]=0
plt.imshow(text,cmap='jet')
plt.savefig('text.png', dpi=300, bbox_inches='tight')
plt.show()

person = cv.imread('text.png')
plt.imshow(cv.cvtColor(person, cv.COLOR_BGR2RGB))
cv.imwrite('person.jpg', person)

# get binary image and apply Gaussian blur
person_gray = cv.cvtColor(person, cv.COLOR_BGR2GRAY)
person_preprocessed = cv.GaussianBlur(person_gray, (5, 5), 0)
cv.imwrite('person-Gray.png', person_preprocessed)
plt.imshow(cv.cvtColor(person_preprocessed, cv.COLOR_GRAY2RGB))

【问题讨论】:

  • 你用什么方法“转换为二进制形式”?我们需要更多信息来帮助您。请使用相关详细信息更新问题。
  • 由于图像很暗,我您必须降低转换阈值。如果没有看到您的代码和数据,很难确定。
  • 请发布您的代码和原始图像,而不是从 pyplot 保存的图像。欢迎来到堆栈溢出。请阅读帮助中心 (stackoverflow.com/help) 中的信息指南,特别是“如何提出一个好问题”(stackoverflow.com/help/how-to-ask) 和“如何创建最小的、可重现的示例”( stackoverflow.com/help/minimal-reproducible-example).
  • 您好,我已经添加了代码,但是我不知道如何上传文本文件!!
  • 您可以随时通过 Dropbox、Google Drive 或 pastebin 共享文本。

标签: python-3.x image opencv


【解决方案1】:

您可以像这样将图像加载到 Numpy 数组中:

import numpy as np

# Load image
im = np.loadtxt('thermal.txt')

如果我们检查im.dtypeim.shape,它们是:

float64, (288, 382)

现在你想要一个二值图像。我想你的意思是它只会有真/假的值,所以我们需要一个阈值。由于人脸都是32以上的,我们将32作为阈值:

# Threshold - greater than 32 becomes True, all else becomes False
binary = im > 32

binary 现在在人脸所在的位置为 True,在其他位置为 False,但我猜你想要一个图像在背景所在的位置为黑色 (0),在其他位置为白色 (255)。所以你想要:

# Convert from False/True, to 0/255 and save
binary = (binary*255).astype(np.uint8)
cv2.imwrite('result.png', binary)

这给了:

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2023-01-30
    • 2014-01-01
    • 2015-12-07
    • 2013-11-25
    相关资源
    最近更新 更多