Я хочу построить серию изображений, которые хранятся в массиве numpy x_val, но plt.imshow (val [1]) не работает. С другой стороны, с opencv он отлично работает:
cv2.imshow('image', x_val[1])
cv2.waitKey(0)
cv2.destroyAllWindows()
Из того, что я читал до сих пор, я думаю, что проблема в том, что изображение в настоящее время находится в BGR и должно быть преобразовано в RGB (поправьте меня, если я ошибаюсь). Итак, я попробовал следующее:
img = cv2.imshow('image', x_val[1])
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
Но я получил это сообщение об ошибке:
File "C:\Users\Maximal\Documents\Python\PyCharm\TrafficSignClassification\model\trafficSignsClassification.py", line 156, in evaluateTestData
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
Еще я попробовал такой подход:
img = np.array(x_val[1], dtype=np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
Это не дало мне ошибки, но изображение было просто черным. Что я делаю неправильно?
РЕДАКТИРОВАТЬ: В первую очередь я сделал с изображениями следующее:
def preprocessData(self, x_train, x_val, y_train, y_val):
# --- normalize images ---
def normalize(img):
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Grayscale image
img = cv2.equalizeHist(img) # Optimize Lightning
img = img / 255.0 # Normalize px values between 0 and 1
return img
for x in range(len(x_train)):
x_train[x] = normalize(x_train[x])
for x in range(len(x_val)):
x_val[x] = normalize(x_val[x])
# --- transform the data to be accepted by the model ---
y_train = np.array(y_train)
y_val = np.array(y_val)
x_train = np.array(x_train)
x_val = np.array(x_val)
x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2], 1)
x_val = x_val.reshape(x_val.shape[0], x_val.shape[1], x_val.shape[2], 1)
print("preprocessing data done.")
return x_train, x_val, y_train, y_val
Я использую изображения в CNN в TF2, поэтому мне пришлось преобразовать их соответственно. Я могу без проблем построить изображения с помощью plt.imshow () до преобразования. Но после этой функции работает только cv2.imshow ()
x_val[1].shape
? - person tom10   schedule 11.05.2020img = cv2.imshow('image', x_val[1])
, а затем пытаетесь использоватьplt.imshow(img)
? Обратите внимание, чтоcv2.imshow()
не имеет возвращаемого значения, поэтомуimg
будетNone
. - person JohanC   schedule 11.05.2020