OpenCV 复杂背景下的轮廓提取

最近,在学习如何从PCB上提取出胶点轮廓。故,从网上找了一个复杂背景图,学习如何提取轮廓。

目标:从充满划痕的背景中,提取出如下图的轮廓。

处理流程:原图-》转为灰度图-》中值滤波提取背景图-》背景图-灰度图,得到目标区域和划痕区域-》二值化-》形态学-》轮廓寻找,排序-》绘制轮廓。

处理过程的代码:

cpp 复制代码
m_srcImg = cv::imread("D:/work/vision/OpenCVDemo/image/demo1.png");

	cv::Mat gray, blur_img, binary_img, binary_img_low, binary_img_high, diff_img, morphology_img_open, morphology_img_close;
	if (m_srcImg.channels() == 3)
	{
		cv::cvtColor(m_srcImg, gray, cv::COLOR_BGR2GRAY);
	}
	else
	{
		gray = m_srcImg.clone();
	}

	cv::medianBlur(gray, blur_img, 199);
	//cv::bilateralFilter(gray, blur_img, 149, 30, 30);
	//cv::absdiff(gray, blur_img, diff_img);
	//diff_img = gray - blur_img;
	diff_img = blur_img - gray;
	cv::imwrite("D:/work/vision/OpenCVDemo/image/diff.png", diff_img);

	cv::threshold(diff_img, binary_img, 20, 255, cv::THRESH_BINARY);

	cv::Mat kernel1 = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(3, 3));
	cv::Mat kernel2 = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(3, 3));
	cv::morphologyEx(binary_img, morphology_img_open, cv::MORPH_OPEN, kernel1);
	cv::morphologyEx(morphology_img_open, morphology_img_close, cv::MORPH_CLOSE, kernel2);

	std::vector<std::vector<cv::Point>> contours;
	cv::findContours(morphology_img_close, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
	std::sort(contours.begin(), contours.end(), [](const std::vector<cv::Point> &a, const std::vector<cv::Point> &b) {
		return cv::contourArea(a) > cv::contourArea(b);
	});
	cv::drawContours(m_srcImg, contours, 0, cv::Scalar(0, 0, 255));

记录:

kernel_size =199的中值滤波结果:

最终结果:

kernel_size = 99:

二值化

相关推荐
快乐非自愿1 天前
RAG夺命10连问,你能抗住第几问?
人工智能·面试·程序员
千匠网络1 天前
破局出海壁垒,千匠网络新能源汽车跨境出海解决方案
人工智能
马丁聊GEO1 天前
解码AI用户心智,筑牢可信GEO根基——悠易科技深度参与《中国AI用户态度与行为研究报告(2026)》发布会
人工智能·科技
nap-joker1 天前
Fusion - Mamba用于跨模态目标检测
人工智能·目标检测·计算机视觉·fusion-mamba·可见光-红外成像融合·远距离/伪目标问题
一只幸运猫.1 天前
2026Java 后端面试完整版|八股简答 + AI 大模型集成技术(最新趋势)
人工智能·面试·职场和发展
Promise微笑1 天前
2026年国产替代油介损测试仪:油介损全场景解决方案与技术演进
大数据·网络·人工智能
深海鱼在掘金1 天前
深入浅出 LangChain —— 第三章:模型抽象层
人工智能·langchain·agent
生信碱移1 天前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
workflower1 天前
具身智能行业应用-生活服务业
大数据·人工智能·机器人·动态规划·生活
GitCode官方1 天前
基于昇腾 MindSpeed LLM 玩转 DeepSeekV4-Flash 模型的预训练复现部署
人工智能·开源·atomgit