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

news2024/11/26 18:29:46

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.coloradmin.cn/o/1659843.html

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

相关文章

【C++】07.string详解

目录 一、为什么会有string? 二、string的常见接口说明 2.1 string的默认成员函数 2.1.1 默认构造函数 2.1.2析构函数 2.1.3赋值运算符 2.2迭代器介绍 2.2.1 正向迭代器 2.2.2 反向迭代器 2.3 string类对象的容量操作 2.4 string类对象的访问及遍…

django显示网页步骤

显示网页步骤 小白的django学习笔记 2024/5/6 8:30 文章目录 显示网页步骤创建输入框(文本、单选、多选)效果如何在django中显示网页写函数配置地址运行,要选择这个工程名的,使用socket复制ip,后面在加上名字,成功&…

Qexo:让你的静态博客动起来

Qexo是一个强大而美观的在线静态博客编辑器,它不仅限于编辑,而是将静态博客提升到新的高度。通过GPL3.0开源协议,Qexo提供了一个集编辑、管理、扩展于一体的平台,让静态博客也能拥有动态的元素。无论你是Hexo、Hugo还是Valaxy的用…

LeetCode 404.左叶子之和

LeetCode 404.左叶子之和 1、题目 题目链接:404. 左叶子之和 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别…

Linux网络编程:TCP并发服务器实现

目录 1、前言 2、多进程代码实现 2.1 创建新的进程 2.2 客户端接收响应函数 2.3 僵尸进程处理 2.4 完整代码 2.5 代码测试 3、多线程代码实现 3.1 创建新的线程 3.2 线程函数定义 3.3 完整代码 3.4 代码测试 4、总结 1、前言 前面实现了基本的TCP编程&#xf…

idea 使用 git

可以看见项目地址, git clone 地址 就可以拉新项目了 命令 git remote -v

水果成篮 ---- 滑动窗口

题目链接 题目: 分析: 题目中, 我们只能连续采摘树, 而且采摘的树不能超过两种,找到可以包含最多树的方案, 所以我们可以理解为: 找到最长的连续子数组, 子数组中的数据种类不大于…

TC6291C 一款电流模式升压型DC-DC转换器芯片IC

一般概述 TC6291C是一款电流模式升压型DC-DC转换器。其脉宽调制电路,内置0.2Ω功率场效应管使这个调节器具有高功率效率。内部补偿网络也减少了多达6个的外部元件。误差信号放大器的同相输入端连接到0.6V精密基准电压,内部软启动功能可以减小瞬间…

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

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

element ui的table多选

使用el-table的selection-change事件来获取选中的值&#xff1b; 例&#xff1a; html代码&#xff1a; <el-button type"primary" click"openTableSet">列表设置</el-button><!-- 列表设置弹框 --> <el-dialog :close-on-click-mo…

FPGA+炬力ARM实现VR视频播放器方案,3D眼镜显示

3D眼镜显示&#xff1a; FPGA炬力ARM方案&#xff0c;单个视频源信号&#xff0c;同时驱动两个LCD屏显示&#xff0c;实现3D 沉浸式播放 客户应用&#xff1a;VR视频播放器 主要功能&#xff1a; 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文…

linux性能监控之htop

上一章节我们说了下atop&#xff0c;接下来我们说下htop&#xff0c;htop其实就是top的升级版&#xff0c;允许用户监视系统上运行的进程及其完整的命令行&#xff0c;我们还是安装下看看运行htop的效果&#xff1a; #1.查看htop是由哪个yum源提供的 [rootk8s-master ~]# yum …

recycleview和banner新闻列表轮播图

说明&#xff1a;最近碰到一个需求&#xff0c;弄一个新闻列表和轮播图&#xff0c;在首页显示&#xff0c;并且需要json解析&#xff0c;图片下载&#xff0c;轮播图和新闻列表一起滑动 ui效果图&#xff1a; 文件说明&#xff1a; step1:引用依赖包 图片下载 json解析 轮播…

揭秘金融行业:资本的流转与价值的创造

金融行业&#xff0c;这个庞大而复杂的经济体系&#xff0c;如同现代社会的血脉&#xff0c;支撑着全球经济的运行与繁荣。它不仅关乎金钱的流通&#xff0c;更是涵盖了资金的管理、分配、增值、保护以及一系列与之相关的专业服务。今天&#xff0c;就让我们一起深入探索这个充…

护士节有趣味h5互动小游戏的作用是什么

护士节能够开展的营销活动种类也比较多&#xff0c;但无论如何都应该契合品牌元素和实现目标目的&#xff0c;基于微信平台的趣味玩法在参与和分享/效果方面都有利处。 在【雨科】平台有多款护士节趣味活动玩法&#xff0c;轻松设置快速开始&#xff0c;品牌宣传、渠道涨粉引流…

【数据库原理及应用】期末复习汇总高校期末真题试卷05

试卷 一、选择题 1.( )是存储在计算机内有结构的数据的集合。 A.数据库系统 B.数据库 C.数据库管理系统 D.数据结构 2.数据库的三级模式结构中&#xff0c;数据库对象—视图是( ) A.外模式 B.内模式 C.存储模式 D.模式 3.在下列关于关系表的陈述中&#xff0c;错误的是(…

批量无人值守设备运维如何轻松搞定,设备授权和分组很关键

如今数字化时代&#xff0c;很多企业的一线业务依托无人值守的智能终端设备展开&#xff0c;这类设备的广泛使用可以帮助企业以较小的成本铺开大规模的业务&#xff0c;比如现在随处可见的智能售货机&#xff0c;商场的各类智能互动终端等等。 这类设备整体上可以降低业务开展…

淘宝电商商家ERP订单接口接入指南:对接ERP与淘宝系统的数据桥梁

最近几年&#xff0c;电商发展如火如荼&#xff0c;一方面互联网企业在推互联网 和O2O&#xff0c;同时很多传统企业也在积极互联网&#xff0c;通过各种电商平台拓展销售渠道&#xff0c;有些还同时建有自建的电商平台。这些电商平台通常下单&#xff0c;结算&#xff0c;促销…

(三十七)第 6 章 树和二叉树(二叉树的二叉链表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? st…

ES之道:IK分词器的魔法般变身

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 ES之道&#xff1a;IK分词器的魔法般变身 前言IK分词器简介IK分词器原理创建索引和配置IK分词器实战(docker搭建的Es)下载ik插件创建一个ik分词器的索引如果希望将原来的索引覆盖重新索引数据删除旧索…