学openCV,不会数字图像系统可不行

news2024/9/28 1:19:25

来源:投稿 作者:小灰灰
编辑:学姐

前言

在光照的情况下,通过成像系统将大自然中的物体拍摄出来,成像系统手机自带有,这里面我们关心的是分辨率,成像系统显示的点数越多,阵列越大,越能真实的反映出当时物体的形象颜色。

图形与图像的区别

存储格式不一样,图形是由指令来构成的,命令在计算机里是语句,记录的是坐标,颜色。图像没有命令,是一个大数据,里面是像素值,直观,信息量大

图像的表示由颜色值这样一个矩阵表示,而颜色值对应于颜色表里面的索引值。点的处理有领域法,平域法,空域法。

复原,增强,分割

图像的文件格式

黑白图像

0 1

索引图像

有索引表,索引表矩阵,数据内容不一样,造成有灰度图像(RGB三个分量值相等,索引号等于颜色的灰度值),伪彩色图像(分度值不相等,只能表示256中的一色),真彩色数据区是三个矩阵。

有调色板了,意味着我们要用我们带的调色板去显示这张图。有颜色表,八位,调到计算机内存,创建调色板,把调色板放到设备环境里面。没有,真彩色,直接用RGB显示图像。

位图图像

位图文件来说最常用的几种格式👇。

BMP位图可以直接进行绘画操作;

GIF(Graphics Interchange format图像转换格式,用来传输,在文件里面进行插入,容量小,颜色数有限)位图;

TIFF(Tag image file format标签图像文件格式)位图;

JPEG(Join photographics experts group联合图像专家组)位图。

BMP文件

BITmapfileheader(位图文件头结构),bitmapinfoheader(位图信息头结构),位图颜色表rgbquad,位图像素数据。

图像滤波与增强

图像滤波:让信号波一部分可以通过,一部分不通过,根据图像的高低频,设置高通和低通滤波器,高通滤波器可以检测变化尖锐的地方,低通滤波器可以让图像变得平滑,消除噪声,高通可以用于边缘检测,低通可以用于图像的平滑去燥。

  • 线性滤波:方框滤波,均值滤波,高斯滤波
  • 非线性滤波:中值滤波,双边滤波
  • 领域算子:利用周边的信息进行计算,
  • 线性滤波:输入像素的加权和,类似于卷积

2.1 方框滤波:boxFilter

使他更模糊

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("2.jpg")
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.subplot(131),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
arry=np.array(img).tolist()
r=cv2.boxFilter(img,-1,(3,3),normalize=1)
d=cv2.boxFilter(img,-1,(3,3),normalize=0)
plt.subplot(132),plt.imshow(r),plt.title('equa')
plt.xticks([]),plt.yticks([])
plt.subplot(133),plt.imshow(d),plt.title('equa')
plt.xticks([]),plt.yticks([])
plt.show()

2.2 均值滤波:blur()

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("2.jpg")
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
 
plt.subplot(122),plt.imshow(result),plt.title('equa')
plt.xticks([]),plt.yticks([])
plt.show()

2.3 高斯滤波()

能有效的消除高斯噪声,保留更多的图像细节

import cv2
import numpy as np
from matplotlib import pyplot as plt
 
img=cv2.imread('2.jpg')
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blur=cv2.GaussianBlur(img,(7,7),7)
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img),plt.title('blurres')
plt.xticks([]),plt.yticks([])
plt.show()

2.4 非线性中值滤波

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('3.jpg')
median = cv.medianBlur(img,7)
 
 
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(median),plt.title('median')
plt.xticks([]), plt.yticks([])
plt.show()

2.5 非线性双边滤波

import cv2
from matplotlib import pyplot as plt
img = cv2.imread('bilateral.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blur = cv2.bilateralFilter(img,-1,15,10)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

2.6 数据增强

直方图均衡化:将分布不均匀的图片变成分布均匀的方法.

import cv2
 
from matplotlib import pyplot as plt
img = cv2.imread("./image/dark1.jpg")
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(result),plt.title('blurres')
plt.xticks([]),plt.yticks([])
plt.show()

Gamma变换

是对图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数的关系,目的就是用来图像增强 ,提升暗部细节,通过非线性变换,让图像从曝光强度的线性响应变得更加 接近人眼感受的响应

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('2.jpg')
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
def adjust_gamma(image, gamma=1.0):
    invGamma = 1.0/gamma
    table = []
    for i in range(256):
        table.append(((i / 255.0) ** invGamma) * 255)
    table = np.array(table).astype("uint8")
    print(table)
    return cv2.LUT(image, table)
 
img_gamma = adjust_gamma(img, 0.8)
#print(img_gamma)
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_gamma),plt.title('blurres')
plt.xticks([]),plt.yticks([])
plt.show()

点击卡片关注👇每日更新AI前沿&论文资料代码数据集

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIA静态试验(12.30-31复习)

目标实现: 2、首先进行子网划分 基于192.168.1.0 24划分 ‘一共7个路由器需要7个网段还有7个主干网 192.168.1.0/24 ----用于骨干 192.168.1.32/27 ----R1环回 192.168.1.32/28 192.168.1.48/28 192.168.1.64/27 --- R2环回 192.168.1.64/28 192.168.1.80/28 …

Java之网络相关概念

寒假又开始更新java了,之后更新的是b站教程韩顺平老师的课,编译器我从idea换成eclipse(因为蓝桥杯只有eclipse,要先熟悉) 1.网络相关概念 网络通信 网络 ip地址 1.简单来说ip地址是每一台主机的标识 类似于我们现…

Vue 疑难扎症(一)有时候取不到Vue对象中值怎么办?对象值发生改变了但是页面没有刷新怎么办?

目录 有时候取不到对象中值怎么办? 问题截图 问题代码 问题分析 情况1 情况2 情况3 问题解决 对象值发生改变了但是页面没有刷新怎么办? 为什么? 常见错误写法: 怎么办? 有时候取不到对象中值怎么办&…

Node.js--》如何在Node.js中使用中间件,看这一篇就足够了

目录 中间件 中间件函数使用 中间件的作用 中间件分类 使用中间件的注意事项 编写接口 跨域问题及其解决方案 中间件 中间件特指业务流程的中间处理环节。当一个请求到达 Express 的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理…

【网络排查】用于接口不通,mysql,kafka等数据库介质连不上的排查

这篇文章记录生产实践中遇到的网络不通的例子 文章目录前言1. 网络协议1.1 应用层找到有问题的服务端 IP总结前言 接口调用不同了了怎么办? 就找接口服务提供方,肯定是提供方的问题的,跟调用方有啥关系~ kafka,mysql等数据库介质…

JAVAGUI编程初识之Swing

文章目录一 常用窗口1.1 JFrame框架窗口1.2 演示-JFRame,JLable的使用1.3 JDialog标签1.3.1 演示-JDialog标签二 标签组件2.1 标签2.2 图标2.2.1 ICon接口简介2.2.2 演示-用Icon接口创建图标2.3 图片图标2.3.1 演示-图片图标三 布局管理器3.1 绝对布局3.1.1 绝对布局简介3.1.2 …

年末再看指针。看来搞C/C++,如影随形的指针就得门清~~~

继上篇博文因内核页表引出的指针问题,后来又研究了一番,这次应该比较清楚了,这里再总结一下。 目录 0 前言 1 普通指针: 2 指针的指针: 3 普通指针参数: 4 指针的指针参数: 5 函数指针&a…

[Kettle] 认识Kettle

1.初识Kettle Kettle是ETL数据整合与处理工具,翻译成中文是"水壶"的意思,可理解为希望把各种数据放到一个壶里,像水一样以一种指定的格式流出,表达数据流的含义 ETL(Extract - Transform - Load)是将数据从数据来源端…

centos7部署rancher2.5

一、 什么是 Rancher Rancher 是为使用容器的公司打造的容器管理平台。Rancher 简化了使用 Kubernetes 的流程,开发者可以随处运行 Kubernetes(Run Kubernetes Everywhere),满足 IT 需求规范,赋能 DevOps 团队。 Ran…

单纯形法与对偶单纯形法的通俗理解

cigma<0,a>0 min cigma/(a) 决定出基变量 1对偶单纯形法 意思是看c就是所有货物的价值&#xff0c;去看一眼这些货物单价组合售卖的价值&#xff0c;这些价值肯定要都大于0&#xff0c;而且&#xff0c;组成这个c的系数也应该是都是正的&#xff0c; c最小证明对min&a…

港科夜闻|香港科大-越秀集团百万奖金国际创业大赛2022年度前8强20强项目评审结果公布...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、“香港科大-越秀集团”百万奖金国际创业大赛2022年度前8强&20强项目评审结果公布。2022年赛事中的各赛区前三名项目&#xff0c;共计23个项目自动入围年度总决赛&#xff0c;本轮评审在这23个项目中&#xff0c;评选出了…

Hudi学习02 -- Hudi核心概念

文章目录基本概念时间轴&#xff08;Timeline&#xff09;文件布局&#xff08;File Layout&#xff09;索引&#xff08;Index&#xff09;索引原理索引类型索引的选择策略表类型&#xff08;Table Types&#xff09;查询类型&#xff08;Query Types&#xff09;写操作&#…

Qt第五十二章:Qt Design Studio使用技巧。

一、运行项目和Debugging项目【快捷键&#xff1a;CtrR】 二、 预览单Qml文件 三、添加资源文件 &#xff08;使用资源&#xff1a;将资源拖动到Editor中的矩形中即可&#xff09; 四、多状态【正常状态、按下状态、划过状态、已点击状态...】 注意&#xff1a;多状态看起来像…

java短网址平台

git地址 Reduce: 短网址平台&#xff0c;Coody Framework首秀&#xff0c;自写IOC、MVC、ORM、TASK、JSON、DB连接池、服务器。百毫秒启动&#xff0c;全项目仅2.1M&#xff08;低配服可运行&#xff09; reduce短网址平台 测试站地址&#xff1a;http://dev.icoody.cn/ 技…

DOM事件

鼠标事件监听 键盘事件监听 表单事件监听 常见的页面事件监听 事件传播 事件传播顺序&#xff1a;从内到外&#xff08;冒泡阶段&#xff09;onxxx这样写法只能监听冒泡阶段 addEventListener()方法第三个参数如果为true监听捕获阶段&#xff0c;false监听冒泡阶段(默认) 最…

C语言及算法设计课程实验二:数据类型、运算符和简单的输入输出

C语言及算法设计课程实验二&#xff1a;数据类型、运算符和简单的输入输出一、实验目的二、实验内容2.1、输入并运行教材第3章第4题给出的程序&#xff1a;2.2、输入第3章第5题的程序2.3、输入以下程序&#xff1a;2.4、程序设计题&#xff1a;假如我国国民生产总值的年增长率为…

遗传算法解决函数优化问题

遗传算法解决函数优化问题 作者: Cukor丘克环境: MatlabR2020a vscode 为什么要学习遗传算法 为什么要学习遗传算法&#xff0c;或者说遗传算法有什么厉害的地方。例如求解以下函数优化问题&#xff1a;minf(x1,x2)x12x1225∗(sin2x1sin2x2),−10≤x1≤10,−10≤x2≤10.min…

【ACWING】【图的深度优先遍历】【846树的重心】

给定一颗树&#xff0c;树中包含 n个结点&#xff08;编号 1∼n&#xff09;和 n−1条无向边。 请你找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。 重心定义&#xff1a;重心是指树中的一个结点&#xff0c;如果将这个点删除后&…

js复习之正则表达式正向肯定与否定预查询

正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 正则表达式_百度百科 除开常用基本匹配模式&#xff0c;偶尔也会用到…

回顾艰难且不失温度的 2022 年 | 文中附「双12免单王」获奖名单

今天是 2022 年最后一天&#xff0c;回忆往昔&#xff0c;这一年经历了太多的不可思议和无可奈何之事。在年末的短短几周&#xff0c;寒气长驱直下以惊人的速度传给每一个人。我们真诚地希望大家都可以平安渡过这一难关。 即使步步难行&#xff0c;亦要踱步前行&#xff01;无…