如何将经过openCV转换的图像转换为原始格式

时间:2019-03-24 11:48:10

标签: python opencv

我已将原始图像的大小从200x200调整为128x128,因为默认情况下opencv在BGR中读取,因此我已经解决了这个问题,但是在调整大小后变成了灰度(如预期的那样),但是我无法转换回其RGB格式

orignal = cv2.imread(os.path.join("/path","some_image.png"),0)

rgb = cv2.cvtColor(orignal, cv2.COLOR_BGR2RGB)

resized = cv2.resize(rgb,(128,128))

backtorgb = cv2.cvtColor(resized,cv2.COLOR_GRAY2RGB)

plt.imshow(backtorgb)

最后一行给出错误:

  

错误:函数'cv :: CvtHelper :: CvtHelper(cv :)中的OpenCV(4.0.0)/io/opencv/modules/imgproc/src/color.hpp:259:错误:(-2:未指定错误) :InputArray,cv :: OutputArray,int)[with VScn = cv :: Set <1>; VDcn = cv :: Set <3,4>; VDepth = cv :: Set <0,2,5>; cv :: SizePolicy sizePolicy =(cv :: SizePolicy)2u; cv :: InputArray = const cv :: _ InputArray&; cv :: OutputArray = const cv :: _ OutputArray&]'   输入图像中的通道数无效:       'VScn :: contains(scn)'   哪里       “ scn”是3

2 个答案:

答案 0 :(得分:2)

使用cv2.resize()调整图像大小不应将彩色图像变成灰度。它只是简单地将图像 src 调整为指定大小或指定大小。要将图像转换为灰度,请使用cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)。您的错误消息还确认调整大小后的图像具有3个颜色通道。这是cv2.resize()不会将图像更改为灰度的确认。

example

import cv2

image_file = 'assets/color_palette.jpg'

original = cv2.imread(image_file)
cv2.imshow('original', original)

rgb = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
cv2.imshow('rgb', rgb)

resized = cv2.resize(rgb, (128,128))
cv2.imshow('resized', resized)

key = cv2.waitKey(0)

答案 1 :(得分:0)

您可以尝试使用以下方法来调整大小:

请务必牢记长宽比,以使图像看起来不歪斜或失真-因此我们需要计算新图像与旧图像的比率

image = cv2.imread(os.path.join("/path","some_image.png"),0) 
Ratio = 100.0 / image.shape[1]
        dimensions = (128, int(image.shape[0] * Ratio))

# perform the actual resizing of the image and show it
resized = cv2.resize(image, dimensions , interpolation = cv2.INTER_AREA)
cv2.imshow("resized", resized)
cv2.waitKey(0)

调整大小时发生了什么:

第一个参数是我们要调整大小的原始图像。第二个参数是我们先前在Dimensions变量中计算的新图像的计算尺寸。然后,第三个参数告诉我们要使用哪种算法。

如果需要将图像从BGR转换为RGB,则应该能够在调整大小后立即执行此操作。您应该能够在转换之前调整大小