我已将原始图像的大小从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
答案 0 :(得分:2)
使用cv2.resize()
调整图像大小不应将彩色图像变成灰度。它只是简单地将图像 src 调整为指定大小或指定大小。要将图像转换为灰度,请使用cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
。您的错误消息还确认调整大小后的图像具有3个颜色通道。这是cv2.resize()
不会将图像更改为灰度的确认。
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,则应该能够在调整大小后立即执行此操作。您应该能够在转换之前调整大小