Mat src_gray// 保存灰度图
Mat src_binary// 保存二值图
int Threshold1 = 100// 阀值
int Threshold2 = 255
cvtColor(src, src_gray, CV_BGR2GRAY)
threshold(src_gray, src_binary, Threshold1, Threshold2, CV_THRESH_BINARY)
// 反色(黑模盯慧色背景)
//旦答 bitwise_not(src_binary, src_binary)
// 查找图像的所有轮廓
vector<vector<Point>>contours_temp
findContours(src_binary, contours_temp, RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0))
// 筛选的面积限则历定值
double min_area = 100
// 筛选轮廓
for (int i = 0i <contours_temp.size()i++)
{
// 第i个轮廓的面积,
// false:表示某一个方向上轮廓的的面积值,顺时针或者逆时针,一般选择默认false
double contour_area = contourArea(contours_temp[i], false)
// 如果该轮廓的面积小于限定值,那么就判定为黑点
if (contour_area <min_area)
{
...
}
}
根据不同的需求来进行不同的处理1 空洞 这个肯定是像素颜色和周边的不同 建议用阈值分割 然后轮廓检测
2 褶皱 这个褶皱肯定会有梯度的清芹变化 建议检测边缘 再计算褶皱的梯度信息
3 划痕 这个和上一个问题相似 但是也有不同 应该是梯洞正橘纳团度的方向和强度不同(一个是凹一个是凸)
4 斑点 如果只是点点星星的 opencv里也有很多角点检测算法 比如 surf fast ORB等
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)