В настоящее время я работаю над программой обнаружения краев для класса (конкретно, я обнаруживаю уличные линии).
Я читаю изображение и обнаруживаю некоторые края (через шум). Обнаруженные края затем накладываются на исходное изображение. При этом данные изображения сохраняются как numpy.ndarry. В самом конце я хочу сохранить образ на диск (как jpg).
Если я записываю образы на диск через scipy.misc.imsave, все работает нормально. Если я сделаю это через cv2.imwrite, цвета будут искажены, превратившись в своего рода тепловую картинку.
Я прочитал несколько тем о разных цветовых каналах и необходимом масштабировании / преобразовании, но я не могу найти решение от numpy.ndarray до .jpg. Я знаю, что .jpg может иметь только 8-битные или 16-битные цветовые каналы, но не знаю, что оттуда делать. В любом случае я вслепую пытался разделить на 255 (- ›изображение почти черное) и умножить на 255 (-› беловатое тепловое изображение :-)).
Любые идеи? Это соответствующие разделы кода:
Чтение изображения (функция вызывается позже в цикле):
def read(img):
image = mpimg.imread(img)
return image
Функция Draw, вызываемая в цикле для рисования всех линий, определенных в массиве:
def draw_lines(img, line_coordinates, color=[255, 0, 0], thickness=4):
for line in line_coordinates:
for x1, y1, x2, y2 in line:
cv2.line(img, (x1, y1), (x2, y2), color, thickness)
Эта функция вызывает функцию рисования и возвращает изображение со всеми нарисованными линиями.
def depict_lines(img, array_of_coordinates):
line_img = np.zeros((img.shape[0], img.shape[1], 3), dtype=np.uint8)
draw_lines(line_img, array_of_coordinates)
return line_img
Затем я объединяю исходное изображение и изображение, содержащее края:
def weighted_img(line_img, initial_img, α=0.95, β=1., λ=0.):
return cv2.addWeighted(initial_img, α, line_img, β, λ)
combined_images = weighted_img(depicted_lines, original_image)
Наконец, сохраняю образ на диск. Этот вызов производит странные цвета:
cv2.imwrite(new_file_name, combined_images)
тогда как этот отлично работает:
scipy.misc.imsave('outfile.jpg', combined_images)
Это необработанное изображение: естественные цвета
И обработанный: искаженные цвета
Ваша помощь будет оценена!
RGB
илиBGR
изображения, которое вы пытаетесь сохранить на диске.cv2.imwrite()
ожидает, что входное изображение будет в форматеBGR
, но я не уверен в формате ввода дляscipy.misc.imsave
- person ZdaR   schedule 27.01.2017