1 回答

TA貢獻2016條經驗 獲得超9個贊
你可以嘗試這樣的事情:
cv::namedWindow("result1", cv::WINDOW_FREERATIO);
cv::namedWindow("result2", cv::WINDOW_FREERATIO);
cv::Mat img = cv::imread(R"(FRfLi.png)");
// to gray
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
cv::threshold(gray, gray, 80, 255, cv::THRESH_BINARY_INV);
cv::morphologyEx(gray, gray, cv::MORPH_CLOSE, cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 27)));
cv::imshow("result1", gray);
std::vector<std::vector<cv::Point> > contours;
cv::findContours(gray, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size(); ++i) {
cv::Rect rect = cv::boundingRect(contours[i]);
rect.x -= 3;
rect.y -= 3;
rect.width += 6;
rect.height += 6;
cv::rectangle(img, rect, cv::Scalar(0, 0, 255), 2);
}
cv::imshow("result2", img);
cv::waitKey();
變形后你會得到這樣的結果:
并檢測輪廓,您將得到以下結果:
注意: 代碼是用 C++ 編寫的,你可以只考慮它是如何實現的步驟。
我希望它可以幫助你!
添加回答
舉報