opencv图像处理

注释详细

1.图像维度:打印出的结果分别为图片像素的横行、纵列和三原色彩色通道 

import cv2
img=cv2.imread('pictures//3.png')
print(img.shape)
cv2.imshow("img",img)#窗口名、变量名
cv2.waitKey(0)

 

2.图像彩色通道:1张彩色图片(BGR)=3张灰度图,BGR(opencv顺序):Blue,Green,Red

import cv2
img=cv2.imread('pictures//3.png')
cv2.imshow("blue",img[:,:,0])
cv2.imshow("green",img[:,:,1])
cv2.imshow("red",img[:,:,2])#窗口名、变量名
cv2.waitKey(0)

 

import cv2
img=cv2.imread('pictures//3.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转为灰度图
cv2.imshow("gray",gray)
cv2.waitKey(0)

 灰色但有层次感

4.图像裁剪:裁剪参数是先横行再纵列

import cv2
img=cv2.imread('pictures//3.png')
crop=img[5:120,50:200]#裁剪横行、纵列
cv2.imshow("crop",crop)
cv2.waitKey(0)

5.图像绘制

import cv2
import numpy as np
img=np.zeros([400,400,3],dtype=np.uint8)#无符号8位整数,创建了一个黑色画布
cv2.line(img,(10,10),(10,300),(255,0,0),3)#画线段,起点、终点、三原色、粗细
cv2.rectangle(img,(30,10),(100,300),(100,100,0),3)
cv2.circle(img,(200,150),50,(0,0,255),3)#圆心、半径、颜色、粗细
cv2.putText(img,"hello",(200,250),4,1.5,(255,255,255),3)#图片、文字、起始位置、字体类型、大小、颜色、粗细
cv2.imshow('img',img)
cv2.waitKey(0)

 

 6.均值滤波:减少噪点

import cv2
from numpy.ma.extras import medianimg=cv2.imread('pictures//4.jpeg')
cv2.imshow('img',img)
gauss=cv2.GaussianBlur(img,(5,5),0)#图像、高斯核大小必须是正奇数、边界
cv2.imshow('gauss',gauss)
median=cv2.medianBlur(img,5)#图像、滤波器大小必须是正奇数
cv2.imshow('median',median)
cv2.waitKey(0)

7.图像特征提取:提取转角

import cv2
img=cv2.imread('pictures//3.png')
g=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
corners=cv2.goodFeaturesToTrack(g,500,0.1,10)#最多返回500个点,点的质量由于0.1,点间距大于10像素
for corner in corners:x,y=corner.ravel()#标记点cv2.circle(img,(int(x),int(y)),5,255,2)#在找到的点处画圆cv2.imshow('img',img)
cv2.waitKey(0)

 

8.模板匹配

 

import cv2
import numpy as np
img=cv2.imread('pictures//5.webp')
g=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#调灰
t=g[35:100,180:270]#从灰度图像中截出后续匹配模板
m=cv2.matchTemplate(g,t,cv2.TM_CCOEFF_NORMED)#原图像(灰度图)、模板图像(灰度图)、匹配方法(归一化的相关系数匹配法)
l=np.where(m >= 0.9)#查找匹配度大于或等于0.9的所有位置,l是一个元组,包含匹配点的行、列索引
w,h=t.shape[:2]#返回模板的行数和列数,shape内有3个参数,返回前两个
for p in zip(*l[::-1]):#zip是并行地处理处理多个可迭代对象的元素,将l返回的两个行列索引组成坐标x1,y1=p[0],p[1]x2,y2=x1+w,y1+hcv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)#框出目标位置
cv2.imshow('img',img)
cv2.waitKey(0)

9.图像的梯度算法

import cv2
g=cv2.imread('pictures//2.webp',cv2.IMREAD_GRAYSCALE)#转为灰度图
l=cv2.Laplacian(g,cv2.CV_64F)#拉普拉斯算子检测边缘,(图像、指定输出图像深度)
canny=cv2.Canny(g,100,200)#canny算法检测边缘(图像、低阈值、高阈值)
cv2.imshow('l',l)
cv2.imshow('canny',canny)
cv2.waitKey(0)

 

10.阈值算法: 

自适应阈值算法,就是把图片分成许多区域,这样可以减少一张图片上明暗不均的影响

import cv2
g=cv2.imread('pictures//2.webp',cv2.IMREAD_GRAYSCALE)#转为灰度图
ret,binary=cv2.threshold(g,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#图像、阈值初始值(设为0,因为Otsu自动计算阈值)、二值化后的最大值、二值化方法
#red计算最佳阈值,binary是经过二值化的图像
cv2.imshow('binary',binary)
cv2.waitKey(0)

 11.图像形态学算法:腐蚀、膨胀

import cv2
import numpy as np
# 读取图像并转换为灰度图
gray = cv2.imread("pictures//3.png", cv2.IMREAD_GRAYSCALE)
# 对灰度图进行二值化处理
ret, binary = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV)
# 定义腐蚀操作的结构元素
kernel = np.ones((6,6), np.uint8)#创建5*5的矩形结构元素
# 对二值化图像进行腐蚀操作
erosion = cv2.erode(binary, kernel)
#膨胀
dilation = cv2.dilate(erosion, kernel)
# 显示原始二值化图像和腐蚀后的图像
cv2.imshow("binary", binary)
cv2.imshow("erosion", erosion)
cv2.imshow("dilation", dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14776.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

harmonyOS生命周期详述

harmonyOS的生命周期分为app(应用)的生命周期和页面的生命周期函数两部分 应用的生命周期-app应用 在app.js中写逻辑,具体有哪些生命周期函数呢,请看下图: onCreated()、onShow()、onHide()、onDestroy()这五部分 页面及组件生命周期 着重说下onShow和onHide,分别代表是不是…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 (1)OSPFv2 验证的类型和意义。 (2)配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 (3)配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…

快速上手——.net封装使用DeekSeek-V3 模型

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…

国产化创新 守护开放边界网络安全

当今数字化浪潮的席卷下,企业、医院、政府部门等各类机构的信息化建设正以前所未有的速度推进。 在这个数字化转型的关键时期,尤其是在涉及国家核心利益和敏感数据的领域,我们不仅要追求技术的先进性,更要确保安全性和自主可控性…

基于Java的在线购物系统的设计与实现

引言 课题背景 随着Internet国际互联网的发展,越来越多的企业开始建造自己的网站。基于Internet的信息服务,商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代企业需要的是一个功能强…

cefsharp131升级132测试(WinForms.NETCore)

一、升级(Nuget) 版本说明(readme):最低.NET Core3.1 (NET5.0) Visual C 2019 Redist 二、试运行、兼容性测试 三、后记说明 支持H264版本推荐版本63,79,84,88,100,111,125(支持h264和pdf预览) 其他H264版…

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…

【实用教程】在 Android Studio 中连接 MuMu 模拟器

MuMu 模拟器是一个非常流行的安卓模拟器,特别适合开发人员进行应用测试,我使用它的根本原因在于Android Studio自带的AVM实现是太难用了,但是Mumu模拟器启动以后不会自动被Android Studio识别到,但是其他模拟器都是能够正常被Andr…

LLAMA-Factory安装教程(解决报错cannot allocate memory in static TLS block的问题)

步骤一: 下载基础镜像 # 配置docker DNS vi /etc/docker/daemon.json # daemon.json文件中 { "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.c…

Ollama 部署 DeepSeek-R1 及Open-WebUI

Ollama 部署 DeepSeek-R1 及Open-WebUI 文章目录 Ollama 部署 DeepSeek-R1 及Open-WebUI〇、说明为什么使用本方案 一、 安装Ollama1、主要特点:2、安装3、验证 二、Ollama 部署 DeepSeek1、部署2、模型选用3、Ollama 常用命令4、Ollama模型默认存储路径 安装open-w…

基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

redis项目

短信登录 这一块我们会使用redis共享session来实现 商户查询缓存 通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容 优惠…

【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统

前言 本文主要介绍我最近开发的一个个人实战项目,“基于深度学习的人脸门禁 IPC 智能安防监控系统”,全程满帧流畅运行。这个项目我目前全网搜了一圈,还没发现有相关类型的开源项目。这个项目只要稍微改进下,就可以变成市面上目前…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(四)

#作者:闫乾苓 系列前几篇: 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)》:link 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)》: lin…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(五)

#作者:闫乾苓 系列前几篇: 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)》:link 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)》: lin…

mysql 学习11 事务,事务简介,事务操作,事务四大特性,并发事务问题,事务隔离级别

一 事务简介, 数据库准备: create table account(id int auto_increment primary key comment 主键ID,name varchar(128) not null comment 姓名,backaccountnumber char(18) unique comment 银行账号,money float comment 余额 )comment 银行账号表;…

C语言的灵魂——指针(3)

前言:上期我们介绍了const修饰指针,saaert断言都是针对指针本身的,文章后面我们用指针与数组建立了联系,这种联系或者是关系就是这篇文章所要介绍的。上一篇文章的传送门:指针2 指针3 一,数组名的含义及理解…

企业FTP替代升级,实现传输大文件提升100倍!

随着信息技术的飞速发展,网络安全环境也变得越来越复杂。在这种背景下,传统的FTP(文件传输协议)已经很难满足现代企业对文件传输的需求了。FTP虽然用起来简单,但它的局限性和安全漏洞让它在面对高效、安全的数据交换时…

树和二叉树_7

树和二叉树_7 一、leetcode-102二、题解1.引库2.代码 一、leetcode-102 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 样例输入:root [3,9,20,null,nu…

2.8作业

作业 优化登录框: 当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录 当…