【问题标题】:opencv python code equivalent in C++C ++中的opencv python代码等效
【发布时间】:2016-03-05 02:14:30
【问题描述】:

我有这段代码在 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 数组对于数值计算非常低效。

标签: python c++ opencv


【解决方案1】:

这一行:

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

【讨论】:

  • 我看到的两个问题:1.内核应该是8UC1,2.1可能被解释为数据地址。所以Mat m = Mat(3, 3, CV_8UC1, cv::Scalar(1));Mat m = Mat::ones(3, 3, CV_8UC1);
  • 我知道它默认为“1”,所以我更新了更明显的标量解决方案。谢谢!
  • 谢谢。另一个问题:在python中我们可以这样做:mat1[mat2==255] = 0。什么是等价的en C++?
  • 您可能还想提及getStructuringElement()。 @testpresta mat1.setTo(0, mat2 == 255);
猜你喜欢
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 2014-02-03
相关资源
最近更新 更多