2013-03-01 3 views
1

Я преобразовываю код Matlab в C++ с использованием библиотек OpenCV.roipoly matlab эквивалент функции OpenCV

Может ли кто-нибудь сказать мне roipoly matlab эквивалент функции в OpenCV ??

Или как получить ту же функциональность с помощью OpenCV?

BW = roipoly(I, c, r) 

BW = roipoly (I, с, г) возвращает ROI, заданный многоугольника, описанного векторами с и г, которые определяют строки и столбца индексов каждой вершины, соответственно. c и r имеют одинаковый размер.

В моем случае я хочу извлечь из изображения треугольник roi, поэтому c и r имеют размер 3x1.

Может ли кто-нибудь сказать мне, как это сделать на C++ с использованием OpenCV?

ответ

3

В OpenCV нет встроенной функции, такой как roipoly.

Вместо этого OpenCV предоставляет такие функции, как cv2.polyline() и cv2.drawContours(). Если у вас есть координаты вершин (как показано в Matlab), вы можете создать с ними массив numpy. Затем нарисуйте этот многоугольник на черном изображении, которое даст вам изображение маски, возвращенное roipoly. Пример показано ниже:

import cv2 
import numpy as np 

img = cv2.imread('eight.png') 
mask = np.zeros(img.shape[:2],dtype = 'uint8') 

c = [194, 253, 293, 245] 
r = [72, 14, 76, 125] 

rc = np.array((c,r)).T 

cv2.drawContours(mask,[rc],0,255,-1) 
cv2.drawContours(img,[rc],0,255,2) 
mask = cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR) 

res = np.hstack((img,mask)) 

Ниже результат я получил:

enter image description here

+2

Могу ли я получить CPP эквивалент этого? Я прошу прощения. По крайней мере, код sudo кода? – 2vision2

+0

http://stackoverflow.com/questions/15157433/shift-part-of-an-image-down-in-opencv-cut-and-paste – 2vision2

Смежные вопросы