Область интересов opencv python

Я пытаюсь получить область изображения (ROI) с помощью opencv python. Используемая версия opencv - 2.4.3. Однако когда я пытаюсь вызвать API

cv2.SetImageROI

он возвращает эту ошибку

AttributeError: 'module' object has no attribute 'SetImageROI'

Также при проверке документации кажется, что этот api является устаревшей функцией python. http://docs.opencv.org/2.4.3/search.html?q=setimageroi

Я не уверен, как добиться рентабельности инвестиций, используя текущую версию opencv в python. Может ли кто-нибудь предложить, как это сделать?

Спасибо


person Ajay Nair    schedule 15.03.2013    source источник


Ответы (3)


Хорошо, при дальнейшем анализе выяснилось, что cv2, поскольку он поддерживает структуру массива numpy, больше нет необходимости в API, всем изображением можно управлять в самом массиве. например:

img = cv2.imread('image.png')
img = img[c1:c1+25,r1:r1+25]

Здесь c1 - расположение пикселя левого столбца, а r1 - соответствующее расположение строки. И img теперь имеет изображение, указанное в пикселях в качестве области интереса.

РЕДАКТИРОВАТЬ: здесь очень хорошо объяснено, Как скопировать изображение регион с использованием opencv в python?

person Ajay Nair    schedule 15.03.2013
comment
Посмотрите также ответ @Abid Rahman K здесь: stackoverflow.com/questions/9084609/ - person Ann Orlova; 15.03.2013
comment
Это кажется более исчерпывающим объяснением. Спасибо - person Ajay Nair; 15.03.2013
comment
@AjayNair Как бы вы кадрировали, если интересующая область представляет собой повернутый прямоугольник? - person annena; 27.05.2015
comment
Вот статья документации, где по какой-то причине он более понятен, чем ответ docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/ - person bholagabbar; 05.09.2016
comment
Порядок индексов здесь может быть неправильным - я думаю, что порядок индекса Numpy по умолчанию - это строки, затем столбцы - person Andrew W; 19.08.2019
comment
ВНИМАНИЕ! Неправильный порядок! См. Пример ниже ROI = image [y1: y2, x1: x2] - так, сначала диапазон строк, затем диапазон столбцов. - person Valentin Heinitz; 15.02.2021

Вот визуализация для выбора области интереса на изображении

-------------------------------------------
|                                         | 
|    (x1, y1)      w                      |
|      ------------------------           |
|      |                      |           |
|      |                      |           | 
|      |         ROI          | h         |  
|      |                      |           |   
|      |                      |           |   
|      |                      |           |       
|      ------------------------           |   
|                           (x2, y2)      |    
|                                         |             
|                                         |             
|                                         |             
-------------------------------------------

Считайте (0,0) как верхний левый угол изображения, слева направо как направление x и сверху вниз как направление y. Если у нас есть (x1,y1) в верхнем левом углу и (x2,y2) в качестве нижней правой вершины области интереса, мы можем использовать Numpy-срезку для обрезки изображения с помощью:

ROI = image[y1:y2, x1:x2]

Но обычно у нас не будет правой нижней вершины. В типичных случаях мы, скорее всего, будем иметь координаты (x,y,w,h) ограничивающей рамки ROI, полученные из _ 7_ при повторении контуров

cnts = cv2.findContours(grayscale_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    ROI = image[y:y+h, x:x+w]

Начиная с OpenCV v2.2, массивы Numpy наивно используются для отображения изображений. Этот метод нарезки Numpy для извлечения ROI может не работать со старыми версиями.

person nathancy    schedule 03.10.2019

Как указано в документации, а что касается полученного сообщения об ошибке, вам, скорее, нужно импортировать соответствующий модуль, а затем вызвать метод SetImageROI():

import cv
cv.SetImageROI(imag, rect)
person Community    schedule 05.03.2015