Область интересов 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. Кто-нибудь может подсказать, пожалуйста, как это сделать?

Спасибо

2 ответа

Решение

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

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

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

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

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

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

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

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

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

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 может не работать со старыми версиями

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

import cv
cv.SetImageROI(imag, rect)
Другие вопросы по тегам