【发布时间】:2012-03-20 16:13:23
【问题描述】:
我一直在互联网上寻找一个简单的细化算法,我偶然发现了这个:Thinning algorithm 问题是,我对取消引用运算符没有太多经验。另外,我的项目是在 python 中,它有不同的处理这种情况的方式。所以我有几个问题
1:这段代码在做什么?
void myThinningInit (CvMat ** kpw, CvMat ** kpb)
{
/ / Kernel for cvFilter2D
/ / The algorithm kpw kernel binary image and it has become a matching white, black,
/ / Convolution is divided into two sets of binary image was inverted kpb kernel, then take the AND
for (int i = 0; i <8; i + +) {
* (Kpw + i) = cvCreateMat (3, 3, CV_8UC1);
* (Kpb + i) = cvCreateMat (3, 3, CV_8UC1);
cvSet (* (kpw + i), cvRealScalar (0), NULL);
cvSet (* (kpb + i), cvRealScalar (0), NULL);
}.....
还有 2:如何将这个内核创建转换成 python?
他最终制作了 8 个内核,但我不知道它们的矩阵形式是什么样的。 我不明白“* (kpw + i)”或“* (kpb + i)”在程序的宏伟计划中做了什么。
3) 我可以制作内核并将它们存储在一个列表中吗?如果是这样,我该怎么做?
更新:
k = [1, 2, 3, 5, 6, 7, 8]
kpw = []
kpb = []
for i in k:
kpw.append [i] = cv.CreateMat (3, 3, cv.CV_8UC1)
kpb.append [i] = cv.CreateMat (3, 3, cv.CV_8UC1)
cv.cvSet (kpw [i], cv.RealScalar (0), cv.NULL)
cv.cvSet (kpb [i], cv.RealScalar (0), cv.NULL)
起初我不只是有 kpw [i],它给我一个错误。在快速谷歌搜索后,我发现你需要先索引数组,他们这样做的方式是通过追加。我尝试了这段代码以获得 8 个 3x3 大小的基本内核,但我收到了这个错误:
Traceback(最近一次调用最后一次):
文件“/home/krtzer/Documents/python_scripts/thinning.py”,第 14 行,在 kpw.append [i] = cv.CreateMat (3, 3, cv.CV_8UC1) TypeError: 'builtin_function_or_method' 对象不支持项目分配
这是否意味着我不能在列表中包含矩阵?
【问题讨论】:
-
Kpw(大写的K)是故意的(与kpw(小写的k)不同)? -
This C algorithm 可能更容易理解。 AFAIK OpenCV 不会做这样的事情,在这里对您没有太大帮助(可能除了图像的初始加载)。
-
@mathematical.coffee 这很难说,因为我是从源代码中获取的。将其大写是没有意义的,因为它从未在代码的其他任何地方声明或使用过。感谢你们如此迅速地对此做出回应。
标签: c++ python image-processing opencv dereference