文章目录
void cv::distanceTransform(
InputArray src,
OutputArray dst,
int distanceType,
int maskSize,
int dstType = CV_32F);

#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取图像
cv::Mat o = cv::imread("pill.png", cv::IMREAD_GRAYSCALE);
if (o.empty()) {
std::cerr << "Could not open or find the image!" << std::endl;
return -1;
}
// 二值化处理
cv::Mat binary;
cv::threshold(o, binary, 0, 255, cv::THRESH_BINARY + cv::THRESH_OTSU);
// 形态学开运算
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat op;
cv::morphologyEx(binary, op, cv::MORPH_OPEN, kernel, cv::Point(-1, -1), 1);
// 距离变换
cv::Mat dist_transform;
cv::distanceTransform(op, dist_transform, cv::DIST_L2, 3);
cv::normalize(dist_transform, dist_transform, 0, 1.0, cv::NORM_MINMAX);
// 阈值处理
cv::Mat fore, fore_res;
cv::threshold(dist_transform, fore, 0.3, 1.0, cv::THRESH_BINARY);
fore.convertTo(fore, CV_8U);
fore_res = fore * 255;
// 形态学去噪
cv::Mat kernel2 = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
cv::Mat op2, op2_res;
cv::morphologyEx(fore, op2, cv::MORPH_OPEN, kernel2, cv::Point(-1, -1), 1);
op2_res = op2 * 255;
// 提取轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(op2, contours, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);
cv::Mat res(o);
cv::drawContours(res, contours, -1, 255);
// 缺陷检测
int count = 0;
cv::Mat img = o.clone();
for (size_t i = 0; i < contours.size(); i++) {
cv::Point2f center;
float radius;
cv::minEnclosingCircle(contours[i], center, radius);
double area = cv::contourArea(contours[i]);
double area_circle = 3.14 * radius * radius;
if (area / area_circle >= 0.5) {
cv::putText(img, "OK", center, cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(255, 255, 255), 2);
}
else {
cv::putText(img, "bad", center, cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(255, 255, 255), 2);
}
count++;
}
cv::putText(img, "sum=" + std::to_string(count), cv::Point(20, 30), cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(255, 255, 255));
// 显示结果
cv::imshow("result", img);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}


468

被折叠的 条评论
为什么被折叠?



