首页 > 解决方案 > 试图将灰度图像转换为二进制,希望任何人都可以帮助我

问题描述

我有一个来自热像仪的文本文件,我用 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))

标签: python-3.ximageopencv

解决方案


您可以像这样将图像加载到 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)

这给出了:

在此处输入图像描述


推荐阅读