【发布时间】:2018-08-19 10:28:09
【问题描述】:
我读了一篇文章,讨论如何在 C++ 中使用 OpenCV 对图像进行骨架化。 http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/
看起来不错。但我正在尝试在 Unity 中使用名为 OpenCV for Unity 的资产(OpenCV Java 3.1.0 的克隆)。
所以我尝试将代码从 C++ 移植到 C#,但失败了。
我尝试通过写出图像进行调试。原来图像是全黑的。
顺便说一句,我的用例是白色背景,我认为代码适用于黑色背景,但我用黑色背景白色形状对其进行了测试,仍然没有运气。
Mat GetSkel (Texture2D srcTexture)
{
Mat img = new Mat (srcTexture.height, srcTexture.width, CvType.CV_8UC1);
Utils.texture2DToMat (srcTexture, img);
Debug.Log ("img.ToString() " + img.ToString ());
Imgproc.threshold (img, img, 127, 255, Imgproc.THRESH_BINARY);
Mat skel = new Mat (srcTexture.height, srcTexture.width, CvType.CV_8UC1, new Scalar (0));
Mat temp = new Mat();
Mat eroded = new Mat();
Mat element = Imgproc.getStructuringElement (Imgproc.MORPH_CROSS, new Size(3,3));
bool done;
do
{
Imgproc.erode(img, eroded, element);
Imgproc.dilate(eroded, temp, element);
Core.subtract(img, temp, temp);
Core.bitwise_or(skel, temp, skel);
eroded.copyTo(img);
done = (Core.countNonZero(img) == 0);
} while (!done);
Imgcodecs.imwrite ("/Users/fung/Documents/FYP/Future/Assets/Future -fung/img.jpg", img);
return img;
}
【问题讨论】:
-
请清楚地告诉我们您的问题到底是什么。见how-to-ask。
-
@zwcloud 细化/骨架化算法是用 C++ 实现的(链接在顶部)。我试图将它逐行转换为 C#。但结果与那个网站完全不同。
标签: java c# c++ opencv unity3d