1

我正在使用 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++ 中做到这一点?

4

1 回答 1

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))

下面是我得到的结果:

在此处输入图像描述

于 2013-03-01T05:33:00.933 回答