python - 保存图像时,保存的 jpg 文件的颜色不正确(cv2.COLOR_BGR2RGB 无法修复)
问题描述
我的程序应该拍照,然后将其存储在指定的文件夹中。它正在做所有这些,但是存储的 jpg 文件上的颜色与它显示的图像相去甚远。我想纠正这一点。
我试过 cv2.COLOR_BGR2HSV 但我认为 RGB 是要走的路。请帮忙。
import cv2
import matplotlib.pyplot as plt
import sys
def main():
cap = cv2.VideoCapture(0)
if cap.isOpened():
ret, frame=cap.read()
print(ret)
print(frame)
else:
ret = False
#I AM TRYING TO CONVERT THE COLOR USING THIS LINE OF CODE
img1 = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
plt.imshow(img1)
plt.title("Car Image")
plt.xticks([])
plt.yticks([])
plt.show()
cv2.imwrite("C:/Users/Fahim/PycharmProjects/CarPark/Car_Image.jpg", img1);
cap.release()
if __name__ == "__main__":
main()
我想存储显示的图像
解决方案
OpenCV 和 Matplotlib 的约定是不同的,因为它们分别使用 BGR 和 RGB。
您可能会发现重命名变量很有帮助,例如frame_bgr
. 当您在使用一个包或另一个包的例程之间来回切换时,一个明确的符号将帮助您记住何时应该交换第一个和第三个通道。
您发布的转换非常好。您可以选择将结果分配给img_rgb
.
如果您主要进行cv2
调用,那么在编写自己的函数时,您可能会选择对所有输入和输出采用 BGR 约定,以最大限度地减少转换。
推荐阅读
- nlog - 将 NLog 日志保存到 Azure TableStorage 的最快方法
- r - 使 r 忽略值在列中出现的顺序(通过粘贴多列创建)
- docker - Docker-Compose 挂载卷覆盖主机文件
- c# - 绑定到 DataGrid 外部的属性
- python - 如何从本地 HTML 页面链接到 Jupter 笔记本
- common-lisp - Common Lisp:未定义的函数 k
- php - 如何在 Laravel PHP 框架中合并两个集合而不丢弃(丢失)键?
- match - COUNTIF 基于三个条件使用 OFFSET 和 MATCH
- unity3d - 如何实现游戏中的这种控制:rolly vortex?
- git - 如何在单个 Gitlab 存储库中创建多个项目