2015-04-21 3 views
2

Когда я прочитал изображение, используя opencv imread, я обнаружил, что его высота и ширина меняются местами как то, что должно быть. Как и в моем исходном изображении, размерность (610 на 406), но при чтении с использованием opencv :: imread функция имеет размеры 406 на 610. Кроме того, если я поворачиваю свое исходное изображение перед передачей его функции, то также и никаких изменений. На изображении все еще есть оригинальные размеры.Высота и ширина изображения, которые меняются местами при чтении с использованием opencv imread

Пожалуйста, смотрите пример кода и изображений для уточнения: Итак, ниже я представил входные изображения: один из них является оригинальным, а второй повернут (я повернул его с помощью команды поворота окна, щелкнув правой кнопкой мыши и выбрав «повернуть вправо» «). Выход, который я получаю для обоих изображений, одинаковый. Мне кажется, что вращающееся изображение фактически не меняет свою форму. Я так думаю, потому что, когда я пытаюсь поместить здесь повернутое изображение, он также показывал невращающуюся версию его только (в предварительном просмотре), поэтому мне пришлось снять захват экрана, а затем вставить его Вот.

Это код:

import cv2 
import numpy as np 
import sys 
import os 

image = cv2.imread("C:/img_8075.jpg") 
print "image shape: ",image.shape 
cv2.imshow("image",image) 
cv2.waitKey(0) 
image2 = cv2.imread("C:/img_8075_Rotated.jpg") 
print "image shape: ",image2.shape 
cv2.imshow("image",image2) 
cv2.waitKey(0) 

В результате я получаю за это: форма изображения: (406,610,3) форма изображения: (406,610,3) для обоих изображений.

Здесь я не могу вставлять изображения ввода/вывода, так как он говорит, что у вас должно быть «репутация 10», и я только что присоединился. Любые предложения были бы полезными. благодаря!

+0

Такие же размеры даже после поворота изображения? Вы уверены, что у вас что-то не хватает? –

+0

Как вы узнали, что размеры меняются местами? '.cols' должна быть вашей исходной шириной изображения, а' .rows' должна быть вашей исходной высотой изображения. Если это не так, возможно, ваш просмотрщик изображений внутренне вращает изображения перед отображением?!? – Micka

+0

Эй, Мика, я думаю, вы правы, говоря, что мой просмотрщик изображений внутренне повернул изображение перед отображением. Но я хочу использовать это повернутое изображение только как вход в мой opencv (функция imread). Я работаю над проектом класса, где я читаю изображения из папки, чтобы создать ее составное изображение. Поэтому время от времени изображения в папке неправильно ориентированы. Поэтому, я поворачиваю их (используя, правая кнопка правой кнопки мыши -> поворот вправо). Но, opencv читает только исходное изображение. Что мне делать? – sm08

ответ

1

Я считаю, что вы просто смешались с условностями. Доступ к структурам OpenCV Mat можно получить (ROW, COLUMN).

Так 1920x1080 изображение будет 1080 строк по 1920 COLUMNS (1080,1920)

+0

Здесь вы можете найти дополнительную информацию об этом; http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-mat – Nallath

+0

Эй, я знаю, что речь идет не о соглашениях. Речь идет о чтении изображения, которое было повернуто с помощью команды «Windows-> right-click-> rotate right/left». Я считаю, что это вращение сделано только для целей просмотра, и оно не меняет форму внутри файла изображения. Но, я хочу, чтобы моя opencv-функция считывала повернутое изображение (так как другая некорректно ориентирована). Как я могу это сделать? – sm08

+0

Почему бы просто не повернуть изображение в opencv после того, как вы его прочитали; http://opencvexamples.blogspot.com/2014/01/rotate-image.html#.VTcf6fnF_6M – CodyF

0

Обычно Mat.rows представляют высоты изображения, и Mat.cols представляют ширину изображения.