学习OpenCV(七)

周进展 周进展 1.均值滤波器: 算数均值滤波器是用一个 的滑动窗口计算窗口中所有像素值的平均值,并替换窗口中间像素的值。均值滤波器对高斯、均匀、爱尔兰噪声的效果最好。 I = imread('jpg.png'); In = imnoise(I, 'gaussian', 0, 0.01); f1 = fspecial('average');%默认卷积核尺寸3x3 I_blur1 = imfilter(I... 阅读详情

使用形态滤波器侵蚀和膨胀图像

1、函数cv::erode()

     默认使用3*3矩阵处理二值图像,其作用是用核心矩阵处理图像,替换矩阵所覆盖区域的像素值为这个区域的最小值,也即图像处理后白色可能会减少。

2、函数cv::dilate()

     作用和cv::erode()相反

3、自定义核心矩阵

cv::Mat element(7,7,CV_8U,cv::Scalar(1));
cv::erode(image,eroded,element);

4、同一核心矩阵多次操作

cv::erode(image,eroded,cv::Mat(),cv::Point(-1,-1),3);

使用形态滤波器Opening和Closeing图像

1、关闭操作

cv::Mat element1(5 , 5 , CV_8U , cv::Scalar(1)) ;
	cv::Mat closed ;
	//cv::Mat closed1 ;

	cv::morphologyEx(image , closed , cv::MORPH_CLOSE , element1) ;
	//cv::dilate(image , closed1 , element1) ;//这两步等价于以上一步
	//cv::erode(closed1 , closed1 , element1) ;

2、打开操作

     类似关闭操作

注意:opened和closed可以依次使用获得不同的效果比如先使用closed在使用opened可以获得图像中的主要Object。

参考: 《opencv cookbook》P120


使用形态滤波器检测图像中的边界和角:

cv::Mat getEdges(const cv::Mat &image)
	{
		cv::Mat result ;
		cv::morphologyEx(image , result , cv::MORPH_GRADIENT , cv::Mat()) ;
		applyThreshold(result) ;
		return result ;
	}

cv::Mat getCorners(const cv::Mat &image)
	{
		cv::Mat result ;
		cv::dilate(image , result , cross) ;//相当于Closing
		cv::erode(result , result , diamond) ;

		cv::Mat result2 ;
		cv::dilate(image , result2 , x) ;
		cv::erode(result2 , result2 , square) ;

		cv::absdiff(result2 , result , result) ;
		applyThreshold(result) ;
		return result ;
	}
cv::morphologyEx(corners,corners,cv::MORPH_TOPHAT,cv::Mat());
	cv::threshold(corners, corners, 40, 255, cv::THRESH_BINARY_INV);

标记出角:

void drawOnImage(const cv::Mat &binary , cv::Mat & image)
	{
		cv::Mat_<uchar>::const_iterator it = binary.begin<uchar>() ;
		cv::Mat_<uchar>::const_iterator itend = binary.end<uchar>() ;

		for(int i = 0 ; it != itend ; ++it , ++i)
		{
			if(!*it)
			{
				cv::circle(image , 
					cv::Point(i % image.step , i / image.step) ,
					5 , cv::Scalar(255 , 0 , 0))  ;
			}
		}
	}

图像分割分水岭法程序:

思路参考:《OpenCV中分割图像的分水岭法》

头文件:

#pragma once

#include "highgui.h"
#include <imgproc\imgproc.hpp>

class WatershedSegmenter
{
private:
	cv::Mat markers ;
public:
	void setMarkers(const cv::Mat & markerImage)
	{
		//把标记markerImage的值变成有符号的32位数存在三种值128 , 255 ,0,其中
		//128 , 255分别代表一种区域,0为未知区域也即需要把0分给以上两种
		markerImage.convertTo(markers , CV_32S) ;
	}

	cv::Mat process(const cv::Mat & image)
	{
		cv::watershed(image , markers) ;
		return markers ;
	}

	cv::Mat getSegmentation()
	{
		cv::Mat tmp ;
		markers.convertTo(tmp , CV_8U) ;
		return tmp ;
	}

	cv::Mat getWatersheds()
	{
		cv::Mat tmp ;
		//只得到两种值0 , 255(黑白),-1(分水岭)置为0,其他为255
		markers.convertTo(tmp , CV_8U , 255 , 255) ;
		return tmp ;
	}
};

源文件:

/*
*
*Function:使用分水岭法分割图像
*
**/
#pragma  once
#include "highgui.h"
#include "imgproc\imgproc.hpp"
#include "WatershedSegmenter.h"
#include <stdio.h>

int main()
{
	cv::Mat binary = cv::imread("D:/Development/OpenCV/images/binary.bmp" , 0) ;
	cv::imshow("original" , binary) ;

	cv::Mat fg ;
	cv::erode(binary , fg , cv::Mat() , cv::Point(-1 , -1) , 6) ;
	cv::imshow("fg" , fg) ;

	cv::Mat bg ;
	cv::dilate(binary , bg , cv::Mat() , cv::Point(-1 , -1) , 6) ;
	cv::imshow("bg_1" , bg) ;
	cv::threshold(bg , bg , 1 , 128 , cv::THRESH_BINARY_INV) ;
	cv::imshow("bg_2" , bg) ;

	cv::Mat markers(binary.size() , CV_8U , cv::Scalar(0)) ;
	markers = fg + bg ;
	cv::imshow("markers" , markers) ;

	cv::imwrite("D:/Development/OpenCV/images/markers.bmp" , markers) ;

	cv::Mat image = cv::imread("D:/Development/OpenCV/images/group.jpg") ;

 	WatershedSegmenter segmenter ;
 	segmenter.setMarkers(markers) ;
 	segmenter.process(image) ;

	cv::imshow("Segmenters" , segmenter.getSegmentation()) ;
	cv::imwrite("D:/Development/OpenCV/images/segmenters.bmp" ,segmenter.getSegmentation() );
	cv::imshow("Watersheds" , segmenter.getWatersheds()) ;
	cv::imwrite("D:/Development/OpenCV/images/watersheds.bmp" ,segmenter.getWatersheds() );

	cv::waitKey(0) ;

	return 0 ;
}


新手学习opencv七:svm 新手学习opencv,svm         新手学习opencv,结合mfc,简单的学习svm。 阅读详情

相关推荐

opencv c++学习七(颜色测试)

目录 1.hsv颜色空间 2.颜色检测(inRange) 函数原型: 函数解释: 3.轨迹条(Trackbar) 创建轨迹条 --- creatTrackbar函数 1.hsv颜色空间 H(色调):0~180 S(饱和度):0~255 V(亮度):0~255 2.颜色检测(inRange) 函数原型: inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgT.

m0_62309595的博客 978

【脑电信号】脑电信号EEG形态学滤波处理【含Matlab源码 4023期】

脑电信号EEG形态学滤波处理 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1436

12、形态学滤波器及其在表面分析中的应用

本文详细介绍了形态学滤波器的基本原理、发展历史及其在表面分析中的应用。文章涵盖了形态学滤波器的工作机制,包括滚动球滤波和滑动线/平面滤波,并通过实际案例展示了其在去除异常值、接触表面分析以及表面粗糙度和波纹度分析中的优势。同时,还比较了形态学滤波器与传统滤波器(如2RC和高斯滤波器)的优劣,并讨论了其在多尺度分析中的扩展应用及优化方法。最后,文章提供了使用MATLAB实现形态学滤波器的具体代码示例,并展望了其未来的发展趋势。

aa123的博客 106

opencv学习七

继续到官网学习core模块的《改变图像的对比度和亮度》: 两种常用的点过程(即点算子),是用常数对点进行 乘法 和 加法 运算: 两个参数  0" style="border:0px; vertical-align:middle"> 和  一般称作 增益 和 偏置 参数。我们往往用这两个参数来分别控制 对比度 和 亮度 。 你可以把  看成源图像像素,把  看

深藏功与名 3319

深入理解形态学滤波技术及其应用

在数字图像处理领域,形态学滤波作为一种强大的技术工具,已被广泛应用于各种信号与图像的预处理和特征提取过程中。形态学滤波的核心在于利用预定义的结构元素对信号进行一系列的形态学操作,以此来达到改善信号质量、提取关键特征的目的。本章将简要介绍形态学滤波的概念和基本应用,为读者进一步了解形态学滤波提供一个起点。形态学滤波不仅能够有效地处理二值图像,还能够应用于灰度图像以及更复杂的多维数据。

weixin_42300144的博客 900

形态学滤波器 matlab程序

形态学滤波器 matlab程序,主要用于特征提起、信号处理

OpenCv3编程学习七

了解两种输入类型: XML和YAML文件 xml:是可扩展标识语言,而YAM相对来说更加优化了xml的优点。 首先采用FileStorage类来进行xml写入或者读取数据。 1.实例化一个FileStorage类的对象 2.使用流操作符 3.使用一个释放函数来构掉类 第一步是XML和YAML文件的打开: 1.调用构造函数准备文件读操作 2.调用函数准备文件写操作 第二步是进行文件读写操作 1.文本和数字的输入输出:写入文件可以用“<<” 读取文件可以用“>>” 第三步是vector和

wzw的博客 211

形态学滤波

基于VISUAL STUDIO 2008和OPENCV实现形态学滤波

OpenCV学习笔记(七)

OpenCV学习笔记,向人工智能迈进!

lbylzk8的博客 726

形态学滤波器

研究数学形态学的二值形态学、灰度形态学的腐蚀、膨胀、开启和闭合四种基本运算,利用这4种基本运算消除图像噪声。本文在总结和分析了数学形态学的基本理论及其应用的基础上,用MATLAB编程实现消除图像噪声。仿真结果表明,本文应用二值形态学和灰度形态学去除图像噪声具有较好的效果,并有一定的实用性。

Unity中URP实现水体效果(泡沫)

在上篇文章中,我们实现了水体的深度。在这篇文章中,我们来使用上篇文章采样后的深度图来实现水中的泡沫效果。

楠溪泽岸的博客 3491

Opencv学习记录【七】——人脸贴图处理

先上上效果图: 然后理一下用到的opencv知识: 带人脸的图像预处理,灰度化就够了,缩小一下增加帧率;opencv的haar特征分类器; face_cascade.detectMultiScale(image_face, faceRect, 1.2, 2, 0 | CV_HAAR_SCALE_IMAGE, cv::Size(30, 30)); 同1得出眼部区域,opencv的神经网络a...

stupid_miao的博客 3920

SAP FB03凭证修改实战:巧用BAPI FI_DOCUMENT_CHANGE更新抬头与行项目

本文详细介绍了SAP FB03凭证修改的实战技巧,重点解析了BAPI FI_DOCUMENT_CHANGE的使用方法。通过该接口,用户可以在不冲销原凭证的情况下直接更新抬头文本(BKTXT)和行项目文本(SGTXT),确保凭证编号连续且符合审计要求。文章包含核心机制解析、完整实现步骤、错误处理方案以及高级应用场景,帮助开发者高效完成SAP财务凭证修改。

weixin_29251567的博客 426

OpenCV学习笔记(七)

漫水填充: 漫水填充法是一种用特定颜色填充连通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法,主要针对连通区域 漫水填充常被用来标记或分离图像的一部分,以便对其进行进一步处理或分析,也可以用来输入图像获得掩码区域,掩码会加速处理过程,或只处理掩码指定的像素点。 最最通俗的讲法:类似于ps的魔术棒功能 OpenCV中有两个版本的FloodFill函数,一个是带掩膜的,一个是不带掩膜的 掩膜mask,用于进一步 ...

qq_39520270的博客 248

量子城域网系列(六):从星型到环形,解析QKD网络拓扑的演进与选型

本文深入解析了量子密钥分发网络从星型到环形等主流拓扑结构的演进历程与核心原理。针对量子城域网的实际部署,文章详细对比了星型、总线型和环形拓扑的优缺点,并结合政务云、金融网点等典型应用场景,提供了实战选型指南,帮助读者在物理限制、安全需求与成本效率间找到最佳平衡。

weixin_29197835的博客 111

高斯-约当(Gauss-Jordan)消元法——c++代码实现

具体算法的详细原理请参照此篇博客:高斯-约当(Gauss-Jordan)消元法下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见。——大神勿喷呀,我是一个小菜鸟~void Guss_Jordan(int n,double *a)//阶数n 系数矩阵a { double*a_temp = new double[n*n * 2];//a与单位矩阵的组合

zwz的学习之路 6875

【OpenCV学习】(七)图像滤波

【OpenCV学习】(七)图像滤波 背景 图像滤波的作用简单来说就是将一副图像通过滤波器得到另一幅图像;明确一个概念,滤波器又被称为卷积核,滤波的过程又被称为卷积;实际上深度学习就是训练许多适应任务的滤波器,本质上就是得到最佳的参数;当然在深度学习之前,也有一些常见的滤波器,本篇主要介绍这些常见的滤波器; 一、卷积相关概念 卷积核大小一般为奇数的原因: 1、增加padding的原因; 2、保证锚点在中间,防止位置发生偏移; 卷积核大小的影响:卷积核越大,感受野越大,提取的特征越好,同时计算量也越大; 边界扩

weixin_40620310的博客 3728

知识推理——TransE(知识表示、知识嵌入)

知识图谱嵌入/表示方法 TransE

missyoudaisy的博客 1831

OpenCV学习笔记(七)图像卷积

&amp;emps;&amp;emps;图像卷积是我们对图像进行处理时最常用的方法,如去噪、滤波、边缘提取等都要用的卷积函数。OpenCV中提供了不同方法的卷积函数,包括Sobel算子、Laplace算子、Canny边缘检测算子等等,除了这些自带的函数,OpenCV库中还提供一种可以自定义卷积核的函数,可由用户自己根据需要定义合适的卷积核。 先学习下OpenCV中自带的卷积函数 Sobel算子 O...

夜月枫雪 2893

VisionPro 机器视觉案例 之 硬币识别

CogPMAlignTool模板匹配工具 掩模

机器视觉李小白的博客 1893

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3474

OpenCV学习笔记之七

函数目录: 1.cvLoadImage 1.cvLoadImage IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR ); 第二个参数 flags 的选择有三个,CV_LOAD_IMAGE_COLOR  默认(1),以三通道彩色图像显示。原图若是GARY,原来的某点像素值,复

u014488388的专栏 694

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

opencv深入学习(七)——square.cpp

// The "Square Detector" program. // It loads several images sequentially and tries to find squares in // each image #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "

机器视觉之家 2053

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 学习OpenCV(六)
下一篇: OpenCV中分割图像的分水岭法
知行且执行
博客等级 码龄14年 38粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值