OpenCV2 imwrite 写入黑色图像

我在使用OpenCV2进行神经风格迁移的尝试中遇到了一些问题… 在使用cv2.imshow(“Output”, output)时,我能够看到我的图片。但是当我使用cv2.imwrite(“my_file.jpg”, output)将输出写入文件时,得到的是一张黑色的图像。这是我的文件扩展名错误造成的吗?然而,当我使用cv2.imwrite(“my_file.jpg”, input)时,它确实显示了我的原始输入图片。有什么想法吗?提前谢谢你。

# 导入必要的包
from __future__ import print_function
import argparse
import time
import cv2
import imutils
import numpy as np
from imutils.video import VideoStream

# 构建参数解析器并解析参数
ap = argparse.ArgumentParser()
ap.add_argument("-m", "--model", required=True,
    help="神经风格迁移模型")
ap.add_argument("-i", "--image", required=True,
    help="要应用神经风格迁移的输入图像")
args = vars(ap.parse_args())

# 从磁盘加载神经风格迁移模型
print("[INFO] 加载风格迁移模型")
net = cv2.dnn.readNetFromTorch(args["model"])

# 加载输入图像,调整其宽度为600像素,然后获取图像尺寸
image = cv2.imread(args["image"])
image = imutils.resize(image, width=600)
(h, w) = image.shape[:2]

# 从图像构建一个blob,设置输入,然后执行网络的前向传递
blob = cv2.dnn.blobFromImage(image, 1.0, (w, h),
    (103.939, 116.779, 123.680), swapRB=False, crop=False)
net.setInput(blob)
start = time.time()
output = net.forward()
end = time.time()

# 重塑输出张量,添加回均值减法,然后交换通道顺序
output = output.reshape((3, output.shape[2], output.shape[3]))
output[0] += 103.939
output[1] += 116.779
output[2] += 123.680
output /= 255.0
output = output.transpose(1, 2, 0)

# 显示推理所需的时间信息
print("[INFO] 神经风格迁移花费了{:.4f}秒".format(
    end - start))

# 显示图像
cv2.imshow("Input", image)
cv2.imshow("Output", output)
cv2.waitKey(0)
cv2.imwrite("dogey.jpg", output)

只有最后四行代码与imshow和imwrite有关,之前的所有代码行都在尝试修改输出图片。


回答:

变量output代表一个由像素组成的彩色图像。每个像素由三个值(RGB)决定。根据图像的表示方式,每个值可以从离散范围[0, 255]或连续范围[0, 1]中选择。然而,在以下代码行中,你将output的条目从离散范围[0,255]缩放到了“连续”范围[0,1]。

output /= 255.0

虽然函数cv2.imshow(...)可以处理存储在范围[0, 1]内的浮点值图像,但cv2.imwrite(...)函数不能。你必须传递一个由范围[0, 255]的值组成的图像。在你的情况下,你传递的值都接近于零且“远离”255。因此,图像被认为是无色的,因此是黑色的。一个快速的解决方法可能是:

cv2.imwrite("dogey.jpg", 255*output)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注