python使用opencv对图像的基本操作(4)

19.调整图片强度

19.1.调整强度

import numpy as np
from skimage import exposure
img = np.array([51, 102, 153], dtype=np.uint8)
mat=exposure.rescale_intensity(img)
print(mat)

:skimage.exposure.rescale_intensity函数来调整img数组的亮度范围。这个函数会将图像的亮度范围从当前范围调整为0到255,如果图像的亮度范围已经在这个范围内,则不会进行任何调整。调整后的数组被存储在变量mat中。
运行结果:
在这里插入图片描述

19.2.使用uint8转float调整增强度

import numpy as np
from skimage import exposure
img = np.array([51, 102, 153], dtype=np.uint8)
tmp = img*1.0
mat=exposure.rescale_intensity(tmp)
print(mat)

:tmp = img*1.0:这行代码创建了一个新的数组tmp,被转换为浮点数类型,这是因为exposure.rescale_intensity函数期望输入为浮点数类型。
运行结果:
在这里插入图片描述

20.绘制直方图

20.1.将原图和归一化后的图片进行对比

from skimage import io
import matplotlib.pyplot as plt
img=io.imread('ww.jpg')
img1=io.imread("D:\ww1.jpg")

plt.subplot(221)
plt.title('1')
arr=img.flatten()
n, bins, patches = plt.hist(arr, bins=256, density=True,edgecolor='None',facecolor='pink')
plt.show()


plt.subplot(221)
plt.title('2')
arr=img1.flatten()
n, bins, patches = plt.hist(arr, bins=256, density=0,edgecolor='None',facecolor='pink')
plt.show()


hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面四个可选。
arr: 需要计算直方图的一维数组。
bins: 直方图的柱数,可选项,默认为10。
normed: 是否将得到的直方图向量归一化,默认为0。
facecolor: 直方图颜色。
edgecolor: 直方图边框颜色。
alpha: 透明度。
histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’。
n: 直方图向量,是否归一化由参数normed设定。
bins: 返回各个bin的区间范围。
patches: 返回每个bin里面包含的数据,是一个list。
运行结果:

在这里插入图片描述

20.2绘制三通道的直方图

from skimage import io
import matplotlib.pyplot as plt
img=io.imread('ww.jpg')
ar=img[:,:,0].flatten()
plt.hist(ar, bins=256, density=1,facecolor='r',edgecolor='r')

ar=img[:,:,1].flatten()
plt.hist(ar, bins=256, density=1,facecolor='g',edgecolor='g')

ar=img[:,:,2].flatten()
plt.hist(ar, bins=256, density=1,facecolor='b',edgecolor='b')
plt.show()
#hold=1表示可以叠加

:hold=1表示可以叠加。
运行结果
在这里插入图片描述

21.使用微分算子对图像进行滤波

21.1.sobel算子/roberts算子/scharr算子/canny算子/prewitt算子

from skimage import io, filters, color,feature
import matplotlib.pyplot as plt

# 读取图片
img = io.imread('ww.jpg')

# 转换图片到灰度
img_gray = color.rgb2gray(img)

# 创建子图
plt.subplot(2, 3, 1)
plt.title('Original')
plt.imshow(img_gray, cmap=plt.cm.gray)

plt.subplot(2, 3, 2)
plt.title('Roberts')  #roberts算子
edges1 = filters.roberts(img_gray)
plt.imshow(edges1, cmap=plt.cm.gray)

plt.subplot(2, 3, 3)
plt.title('Scharr')   #scharr算子
edges2 = filters.scharr(img_gray)
plt.imshow(edges2, cmap=plt.cm.gray)

plt.subplot(2, 3, 4)
plt.title('Prewitt')   #prewitt算子
edges3 = filters.prewitt(img_gray)
plt.imshow(edges3, cmap=plt.cm.gray)

plt.subplot(2, 3, 5)
plt.title('Canny')    #canny算子
edges4 = feature.canny(img_gray)
plt.imshow(edges4, cmap=plt.cm.gray)

plt.subplot(2, 3, 6)
plt.title('Sobel')    # sobel算子
edges5 = filters.sobel(img_gray)
plt.imshow(edges5, cmap=plt.cm.gray)

# 显示所有子图
plt.show()

:sobel算子可用来检测边缘,canny算子也是用于提取边缘特征,但它不是放在filters模块,而是放在feature模块。
运行结果
在这里插入图片描述

21.2.使用Gabor滤波器对图像进行处理

from skimage import data,filters,color
import matplotlib.pyplot as plt
img = io.imread('ww.jpg')
img_gray = color.rgb2gray(img)
filt_real, filt_img = filters.gabor(img_gray,frequency=0.6)   
 
plt.figure('gabor',figsize=(8,8))
 
plt.subplot(121)
plt.title('filt_real')
plt.imshow(filt_real,plt.cm.gray)  

plt.subplot(122)
plt.title('filt-imag')
plt.imshow(filt_img,plt.cm.gray)
 
plt.show()

:filters模块包含了一系列用于图像滤波的函数,frequency=0.6参数指定了滤波器的频率,即它检测的纹理尺度的粗细。
运行结果
在这里插入图片描述

22.在图片上绘制图形

22.1.画线条

#line划线
from skimage import draw
import matplotlib.pyplot as plt
img = io.imread('ww.jpg')
rr, cc = draw.line(10, 500, 400, 600)
draw.set_color(img,[rr, cc],[202,235,216])
plt.imshow(img,plt.cm.gray)

:draw模块包含了一系列用于在图像上绘制形状和线条的函数。
运行结果:
在这里插入图片描述

22.2.绘制圆形

#disk圆形
from skimage import io
import matplotlib.pyplot as plt
img = io.imread('xxz.jpg')
rr, cc=draw.disk((350,350),50)
draw.set_color(img,[rr, cc],[202,235,216])
plt.imshow(img,plt.cm.gray)

运行结果
在这里插入图片描述

22.3.绘制椭圆

#ellipse椭圆
from skimage import io,draw
import matplotlib.pyplot as plt
img = io.imread('ww.jpg')
rr, cc=draw.ellipse(550,820,40,90)
draw.set_color(img,[rr, cc],[255,192,203])
plt.imshow(img,plt.cm.gray)

运行结果
在这里插入图片描述

22.4.绘制多边形

#多边形
from skimage import draw,io
import matplotlib.pyplot as plt
import numpy as np
img = io.imread('ww.jpg')
Y = np.array([200, 200, 360, 500, 500, 360])
X = np.array([300, 400, 450, 400, 300, 250])
rr, cc=draw.polygon(Y,X)
draw.set_color(img,[rr,cc],[202,235,216])
plt.imshow(img,plt.cm.gray)

:Y = np.array([200, 200, 360, 500, 500, 360]):这行代码创建了一个包含六个元素的数组Y,这些元素代表了多边形顶点的y坐标。
X = np.array([300, 400, 450, 400, 300, 250]):这行代码创建了一个包含六个元素的数组X,这些元素代表了多边形顶点的x坐标。
运行结果
在这里插入图片描述

22.5.绘制空心圆

#perimeter是绘制空心圆
from skimage import draw,io
import matplotlib.pyplot as plt
img = io.imread('ww.jpg')
rr, cc=draw.circle_perimeter(350,350,300)
draw.set_color(img,[rr, cc],[202,235,216])
plt.imshow(img,plt.cm.gray)

运行结果
在这里插入图片描述

23.对图像进行角度旋转、水平、垂直镜像操作

import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import numpy as np

img = mpimg.imread('ww.jpg')
#使用numpy.rot90函数将img图像旋转90度。
rotated_img = np.rot90(img)
#使用numpy.fliplr函数将img图像沿水平轴翻转。
flipped_img_horizontal = np.fliplr(img)
flipped_img_vertical = np.flipud(img)  # 定义垂直翻转的图像

plt.subplot(2, 2, 1) 
plt.imshow(img) 
plt.title('Original Image')
plt.axis('off')

plt.subplot(2, 2, 2) 
plt.imshow(rotated_img) 
plt.title('Rotated Image')
plt.axis('off')

plt.subplot(2, 2, 3) 
plt.imshow(flipped_img_horizontal) 
plt.title('Flipped Horizontal Image')
plt.axis('off')

plt.subplot(2, 2, 4) 
plt.imshow(flipped_img_vertical) 
plt.title('Flipped Vertical Image')
plt.axis('off')

plt.show()

:flipped_img_vertical = np.flipud(img):这行代码使用numpy.flipud函数将img图像沿垂直轴翻转。翻转后的图像被存储在变量flipped_img_vertical中。
运行结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unreal Engine(虚幻引擎)的版本特点

Unreal Engine(虚幻引擎)是Epic Games开发的游戏引擎,广泛应用于游戏开发、影视制作、建筑设计、虚拟现实等领域。Unreal Engine版本指的是该引擎的发布版本,不同版本之间在功能、性能和稳定性等方面存在差异。北京木奇移动技术有…

产品推荐 | 基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡

01 产品概述 板卡主芯片采用Xilinx公司的XC7K325T-2FFG900 FPGA,pin_to_pin兼容FPGAXC7K410T-2FFG900,支持8-Lane PCIe、64bit DDR3、四路SFP连接器、四路SATA接口、内嵌16个高速串行收发器RocketIO GTX,软件具有windows驱动。 02 技术指标…

2. 感知机算法和简单 Python 实现

目录 1. 感知机介绍 1.1 背景 1.2 定义 1.2.1 权重 1.2.2 阈值 1.2.3 偏置 1.3 逻辑处理:与门、非门、或门 2. 感知机实现 2.1 与门的 Python 实现 2.2 非门的 Python 实现 2.3 或门的 Python 实现 1. 感知机介绍 1.1 背景 感知机1957年由Rosenblatt提出…

从 Servlet 到 DispatcherServlet(SpringMvc 容器的创建)

DispatcherServlet 的继承体系 SpringMvc 是一个具有 Spring 容器(ApplicationContext)的 Servlet。其中,HttpServlet 属于 JDK 的内容,从 HttpServletBean 开始,便属于 Spring 体系中的内容。 HttpServletBean&…

ALV 排序、汇总

目录 前言 实战 汇总 分类汇总 排序 分类汇总分隔方式(仅适用于LIST ALV) 完整代码: 前言 在SAP ABAP ALV中,排序和汇总是两个关键特性,用于组织和分析数据显示。 排序 排序功能允许用户根据一个或多个…

深入理解指针(4)

目录 1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么?2.2 数组指针变量怎么初始化 3. ⼆维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使⽤4.3 两段有趣的代码4.3.1 typedef 关键字 5. 函数指针数组6. 转移表 1. 字符指针变量 …

gorm-sharding分表插件升级版

代码地址: GitHub - 137/gorm-sharding: Sharding 是一个高性能的 Gorm 分表中间件。它基于 Conn 层做 SQL 拦截、AST 解析、分表路由、自增主键填充,带来的额外开销极小。对开发者友好、透明,使用上与普通 SQL、Gorm 查询无差别.解决了原生s…

探秘主播们的直播美颜SDK:深度学习算法原理

直播美颜技术作为直播行业中的一项重要技术,广受大家关注。本文将深入探讨主播们常用的直播美颜SDK背后的深度学习算法原理,揭秘其神奇之处。 一、什么是直播美颜SDK? 直播美颜SDK是一种应用程序接口,通过嵌入到直播软件中&…

根据数据写动态生成折线图

根据数据格式 dataGoz: [{"xAxis": ["2017-3-1", "2017-3-15", "2017-4-1", "2017-4-12", "2017-5-21", "2017-6-5", "2017-8-12", "2017-9-1", "2017-10-11"],"y…

C++函数模板可变参数如何一次性解包?

零、问题 如下代码中,调用func1的时候,只能递归一次取到一个值,有没有什么方法像func2中那样,一次把所有的值都拿出来呢? ​ 回答 二元操作 (binary operator) 」 :需要两个操作数的操作,比如…

【全开源】JAVA国际版多语言语聊大厅语音聊天APP系统源码

JAVA国际版多语言语聊大厅小程序 随着全球化的加速和互联网技术的飞速发展,人们越来越需要一种能够跨越语言和文化障碍的交流方式。JAVA国际版多语言语聊大厅小程序应运而生,它以其独特的功能和全球化的设计理念,为全球用户提供了一个无障碍…

5.12母亲节营销攻略:TikTok助力出海品牌赢得用户心

母亲节,作为一个全球性的节日,不仅是表达对母亲的感激之情的时刻,也是品牌们展示创意、赢得用户心的黄金机会。2024母亲节将至,如何利用TikTok在母亲节这一特殊时刻进行营销,赢得用户的心,成为出海品牌必须…

私域流量优化:如何利用 AIPL 模型洞察客户生命周期价值

在当今这个数字化时代,商业战场的硝烟从未如此浓烈。随着互联网红利的逐渐消退,公域流量的成本水涨船高,企业间对于有限用户资源的争夺已进入白热化阶段。每一次点击、每一个曝光背后,都是企业不得不承担的高昂代价。在此背景下&a…

【Web】CTFSHOW月饼杯 题解(全)

目录 web1_此夜圆 web2_故人心 web3_莫负婵娟 web1_此夜圆 拿到源码&#xff0c;一眼字符串逃逸 本地测一测&#xff0c;成功弹出计算器 <?phpclass a {public $uname;public $password;public function __wakeup(){system(calc);} }function filter($string){retur…

报名 | AIGC技术分享峰会苏州场来啦!

IGC是近年来人工智能技术迅速发展的一个重要领域。从早期的简单字符生成到现在可以撰写复杂文章、生成高清图片甚至编写代码&#xff0c;AIGC技术的发展突飞猛进&#xff0c;不仅在文学创作、艺术设计、游戏开发和软件编程等领域展现出惊人的潜能&#xff0c;也对各行业提供了前…

项目管理在软件工程中的实践方法

软件工程是一个复杂的过程&#xff0c;涉及到需求分析、设计、编码、测试和维护等多个阶段。有效的项目管理对于确保软件项目成功至关重要。以下是结合附件内容&#xff0c;关于项目管理在软件工程中实践的一些方法。 1. 明确项目愿景和目标 在项目启动之初&#xff0c;项目经…

SpringBoot+logback实现日志记录写入文件

前言 在实际的开发过程中&#xff0c;日志记录有着极其重要的作用&#xff0c;它帮助我们实现更高效的故障排查与调试、更及时的监控和性能优化、更全面的业务分析与决策支持…那么我们如何在SpringBoot项目中实现日志的个性化定制&#xff0c;以满足其他特殊需求呢&#xff1f…

2024年5月6日优雅草蜻蜓API大数据服务中心v2.0.3更新

v2.0.3更新 2024年5月6日优雅草蜻蜓API大数据服务中心v2.0.3更新-修复改版后搜索框漏掉的bug-增加搜索框 提示&#xff1a;优雅草大数据中心已经 上线137天 稳定运行 1181555 次 累积调用 目前大数据中心用户呈现增长趋势&#xff0c;目标2024年11月底突破1亿次调用&#xf…

大语言模型的后处理

后处理的输入 常规意义上的大模型处理流程 import torch from transformers import LlamaForCausalLM, LlamaTokenizer# 加载模型和tokenizer model LlamaForCausalLM.from_pretrained("decapoda-research/llama-7b-hf") tokenizer LlamaTokenizer.from_pretrain…

这个 TypeScript 技巧会让你大吃一惊

从字符串数组中提取自定义类型 “在 TypeScript 的世界里&#xff0c;自定义类型从字符串数组中显现&#xff0c;就像隐藏的宝石。” TypeScript 是一个操纵现有数据和发展良好实践的神奇工具。 今天&#xff0c;我们将探索如何以正确的方式从字符串数组中提取全名&#xff0c…