在C++中等价于OpenCV Python代码

5

我有一段在Python上运行良好的代码。 我希望在C/C++中完成相同的操作,但我不理解如何在C++中使用内核:

kernel = np.ones((3,3),np.uint8)
opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)

kernel和opening都是Mat对象。

我还有:

mat1=np.uint8(mat1)

我不明白这个np前缀是什么意思。

np 前缀是 numpy 库。OpenCV 使用该库进行所有数字操作,因为 Python 数组在数字计算方面非常低效。 - MariusSiuram
1个回答

4

这一行:

kernal = np.ones((3,3)), np.uint8)

在C++中执行以下操作与此相同:

Mat m = Mat(3, 3, CV_8UC1, cv::Scalar(1));
MaruisSiuram说,np前缀是用于numpy库的,在C ++中不使用,您可以直接使用OpenCV Matrix容器。

这行代码:

mat1=np.uint8(mat1)

将 mat1 强制转换为 uint8 类型,可以这样实现:

mat1.convertTo(mat1, CV_8UC1);

2
我看到的两个问题是:1.内核应该是8UC1,2.1可能会被解释为数据地址。因此,可以使用Mat m = Mat(3, 3, CV_8UC1, cv::Scalar(1));或者Mat m = Mat::ones(3, 3, CV_8UC1); - Micka
我知道它默认为“1”,所以我已经更新了更明显的标量解决方案。谢谢! - GPPK
另一个问题:在Python中,我们可以这样做:mat1 [mat2 == 255] = 0。在C++中的等效方法是什么?谢谢。 - testpresta
你可能还想提到 getStructuringElement()。@testpresta mat1.setTo(0, mat2 == 255); - Miki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接