roipoly matlab在OpenCV中的功能相当

时间:2013-03-01 03:25:17

标签: matlab opencv image-processing computer-vision roi

我正在使用OpenCV库将matlab代码转换为C ++。

任何人都可以在OpenCV中告诉我roipoly matlab函数等效吗

或者如何使用OpenCV获得相同的功能?

BW = roipoly(I, c, r)

BW = roipoly(I,c,r)返回由向量c和r描述的多边形指定的ROI,它们分别指定每个顶点的列和行索引。 c和r的大小相同。

在我的情况下,我想从图像中提取三角形roi ,因此c和r的大小为3x1。

任何人都可以告诉我如何使用OpenCV在C ++中执行此操作吗?

1 个答案:

答案 0 :(得分:2)

在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