2
私はこのイメージがあります OpenCVの拡張およびスケルトン(C++)
をそして、私はこのコードで拡張を適用:
int dilation_elem = 0;
int dilation_size = 0;
int const max_elem = 2;
int const max_kernel_size = 21;
void Dilation(int, void*);
int main(int argc, char** argv)
{
src = imread("a18.png");
if(!src.data)
{ return -1; }
namedWindow("Dilation Demo", CV_WINDOW_AUTOSIZE);
cvMoveWindow("Dilation Demo", src.cols, 0);
createTrackbar("Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",
&dilation_elem, max_elem,
Dilation);
createTrackbar("Kernel size:\n 2n +1", "Dilation Demo",
&dilation_size, max_kernel_size,
Dilation);
//int dilation_size =7;
/// Default start
Dilation(0, 0);
waitKey(0);
return 0;
}
void Dilation(int, void*)
{
int dilation_type;
if(dilation_elem == 0){ dilation_type = MORPH_RECT; }
else if(dilation_elem == 1){ dilation_type = MORPH_CROSS; }
else if(dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }
Mat element = getStructuringElement(dilation_type,
Size(2*dilation_size + 1, 2*dilation_size+1),
Point(dilation_size, dilation_size));
dilate(src, dilation_dst, element);
imshow("Dilation Demo", dilation_dst);
imwrite("a18d.png",dilation_dst);
}
最後のステップはスケルトンです:
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
int main()
{
cv::Mat img = cv::imread("a18d.png", 0);
cv::threshold(img, img, 127, 255, cv::THRESH_BINARY);
cv::Mat skel(img.size(), CV_8UC1, cv::Scalar(0));
cv::Mat temp;
cv::Mat eroded;
cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3,3));
bool done;
do
{
cv::erode(img, eroded, element);
cv::dilate(eroded, temp, element); // temp = open(img)
cv::subtract(img, temp, temp);
cv::bitwise_or(skel, temp, skel);
eroded.copyTo(img);
done = (cv::countNonZero(img) == 0);
} while (!done);
cv::imshow("Skeleton", skel);
cv::imwrite("18s.png",skel);
cv::waitKey(0);
return 0;
}
ここ
コード
私はこのために何ができますか?問題は何ですか? これらの手順は画像4で実行され、結果は良好です
スケルトンコードを記入してください。現在、拡張コードは2回コピーされているため、速くは取得できません。 –
あなたはスケルトンコードのためにもここで確認できます。http://stackoverflow.com/questions/22058485/how-to-implement-an-function-equivalent-to-bwmorph-matlab-function-in-opencv/22060992#22060992 –
ありがとう、実際にあなたの方法は良いです私の新しい結果はここにありますhttp://i.resimyukle.xyz/cyNL.pngしかし、画像はこの問題のためのアドバイスを超過しています –