我正在尝试确定一个风力涡轮机,为确保不会出现太多行,我使用了骨架方法将所有内容都做成一行。
我遇到的问题是,与我的骨架输出相比,基于某种原因的Hough变换在很多行上都能看到。
我究竟做错了什么?我尝试将骨架转换为精巧的图像,但这只会使情况变得更糟。下面是代码和图像输出。
// -------- gray scaling ----------
Mat BW1;
cvtColor(frame, BW1, COLOR_BGR2GRAY);
//cv::threshold(img, img, 127, 255, cv::THRESH_BINARY);
cv::Mat skel(BW1.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;
int iterations=0;
do
{
erode(BW1, eroded, element);
dilate(eroded, temp, element);
subtract(BW1, temp, temp);
bitwise_or(skel, temp, skel);
eroded.copyTo(BW1);
done = (countNonZero(BW1) == 0);
iterations++;
} while (!done && (iterations < 25));
//------- Dilate -------------//
Mat BW1_5;
dilate(skel,BW1_5,element);
imshow("bw1.5: skeleton", BW1_5);
//-------Hough lines----------//
Mat HLT1 = frame;
vector<Vec4i> lines;
HoughLinesP( BW1_5, lines, 1, CV_PI/360, 50, 50, 10 );
for(auto & i : lines)
{
line(HLT1, Point(i[0], i[1]), Point(i[2], i[3]), Scalar(0, 0, 255), 2, LINE_AA );
}
imshow("bw1.5: Hough lines", HLT1);