1

我尝试从本地文件夹加载和绘制几个图像(jpg),并发现绘图图像改变了颜色。cv2和matplotlib之间的颜色通道校正已经完成。

这是怎么发生的?如何校正颜色?谢谢。

import cv2
from matplotlib import pyplot as plt
import numpy as np
import os

folder = 'New_Web_Image'
img_list = np.empty([0,32,32,3])
for file in os.listdir(folder):
    img = cv2.imread(os.path.join(folder, file)) 
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 
    img = cv2.resize(img, (32,32), interpolation = cv2.INTER_AREA)

    #plt.imshow(img)  
    #plt.show()#If I plot the image here, the image show right color

    img_list = np.append(img_list, [img[:, :, :]], axis=0) 
    print(img_list.shape) #lists shape check right


plt.imshow(img_list[0]) 
plt.show() #If I plor the image from the lists, the color changed

这是循环中的图像结果: 这是来自 ndarray“列表”的图像:
调整大小后的图像绘制

从 img_list[0] 绘制的图像

4

2 回答 2

1

这不是颜色校正。OpenCV 将层排序为 BGR,而不是我们通常期望的 RGB。只要您留在 OpenCV 世界,那应该没问题。cv2.imread()但是通过加载到那个世界之外的步骤的anding和图像matplotlib.pyplot,这就是你需要的原因

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

让图层首先重新排序。

一堆其他有趣的(并且可能有用的)转换是可能的。见http://docs.opencv.org/3.2.0/df/d9d/tutorial_py_colorspaces.html

于 2017-09-02T23:34:54.510 回答
0

为了半回答我自己的问题,我通过以下方式更正了颜色

  • 首先加载带有 ndarray 输出的图像,
  • 然后改变颜色和大小,并绘制图像

更新代码:

import cv2
from matplotlib import pyplot as plt
import numpy as np
import os

# Load the images 
folder = 'New_Web_Image'
img_list = []
for file in os.listdir(folder):
    img = cv2.imread(os.path.join(folder, file)) 
    if img is not None:
        img_list.append(img)
img_list = np.asarray(img_list)    

# Plot the images
n = img_list.shape[0]
fig, axs = plt.subplots(1, n, figsize=(20,5), dpi=80)
for i in range(n):
    img = img_list[i]
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = cv2.resize(img, (32,32), interpolation = cv2.INTER_AREA)

    axs[i].imshow(img)
plt.show()

另一个问题是“以前代码中的颜色是如何变化的? ”我仍然不清楚。

提前感谢谁会建议。

于 2017-08-11T04:35:56.387 回答