《Python》计算机视觉编程

2023-10-27

基本的图像操作处理

PIL

目前pycharm使用的是pillow库

from PIL import Image
pil_im =Image.open('empire.jpg')

上述代码的返回值pil_im是一个PIL图像对象

图像的颜色转换可以使用convert()方法来实现。
要读取一幅图像,并将其转换成灰度图像,只需要加上convert(‘L’),如下所示:

pil_im=Image.open('empire.jpg').convert('L')

Matplotlib

绘制图像、点和线

from PIL import Image
from matplotlib import pylab
from pylab import *
#读取图像到数组中
im=array(Image.open('D:\\coder\\randomnumbers\\img\\empire.png'))
#绘制图像
imshow(im)

#一些点
x=[100,100,400,400]
y=[200,500,200,500]

#使用红色星状标记绘制点
plot(x,y,'r*')

#绘制连接前两个点的线
plot(x[:2],y[:2])

#添加标题,显示绘制的图像
title('Plotting:"empire.jpg"')
show()

在这里插入图片描述
也可以选择使坐标轴不显示:

axis('off')

在这里插入图片描述

在绘图时,有很多选项可以控制图像的颜色和样式。

命令 效果
plot(x,y) 默认为蓝色实线
plot(x,y,‘r*’) 红色星状标记
plot(x,y,‘go-’) 带圈圈标记的绿线
plot(x,y,‘ks:’) 带有正方形标记的黑色点线

用Pylab绘图的基本颜色格式命令

#引号为英文单引号 颜色
‘b’ 蓝色
‘g’ 绿色
‘r’ 红色
‘c’ 青色
‘m’ 品红
‘y’ 黄色
‘k’ 黑色
‘w’ 白色

用Pylab绘图的基本线型格式命令

线型
‘-’ 实线
‘–’ 虚线
‘·’ 点线

用Pylab绘图的基本绘制标记格式命令

标记
‘·’
‘o’ 圆圈
‘s’ 正方形
‘*’ 星号
‘+’ 加号
‘x’ 叉号

图像轮廓和直方图

将图像灰度化:

from PIL import Image
from pylab import *

#读取图像到数组中
im=array(Image.open('D:\\coder\\randomnumbers\\img\\empire.png').convert('L'))

#新建一个图像
figure()
#不使用颜色信息
gray()
#在原点的左上角显示轮廓图像
contour(im,origin='image')
axis('equal')
axis('off')
show()


在这里插入图片描述
图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。
该(灰度)图像的直方图可以使用hist()函数绘制:

figure()
hist(im.flatten(),128)
show()

在这里插入图片描述

在这里插入图片描述

Numpy

灰度变换

from PIL import Image
from numpy import *
from PIL import Image
from matplotlib import pylab
from pylab import *
im = array(Image.open('D:\\coder\\randomnumbers\\img\\empire.png').convert('L'))
im2 =255-im #对图像进行反向处理
im3 =(100.0/255)*im+100 #将图像像素值变换到100...200之间
im4 =255.0*(im/255.0)**2 #对图像像素值求平方后得到的图像
print(int(im.min()),int(im.max()))
print(int(im2.min()),int(im2.max()))
print(int(im3.min()),int(im3.max()))
print(int(im4.min()),int(im4.max()))

imshow(im3)
show()

输出:

0 255
0 255
100 200
0 255

在这里插入图片描述
在这里插入图片描述

Scipy

图像模糊

from PIL import Image
from numpy import *
from scipy.ndimage import filters
im =array(Image.open('D:\\coder\\randomnumbers\\img\\empire.png').convert('L'))
im2 =filters.gaussian_filter(im,5)

上面guassian_filter()函数的最后一个参数表示标准差
在这里插入图片描述

图像导数

from PIL import Image
from pylab import *
from numpy import *
from scipy.ndimage import filters
im =array(Image.open('D:\\coder\\randomnumbers\\img\\empire.png').convert('L'))
#Sobel导数滤波器
imx=zeros(im.shape)
filters.sobel(im,0,imx)

imy=zeros(im.shape)
filters.sobel(im,1,imy)


magnitude=sqrt(imx**2+imy**2)
imshow(imx)
#imshow(imy)
#imshow(magnitude)


show()

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

计算视差图

下面是扫平面法的具体实现代码,该函数返回每个像素的最佳视差。

def plane_sweep_ncc(im_l,im_r,start,steps,wid):  #使用归一化的互相关计算视差图像
  m,n=im_l.shape
  
  #保存不同求和值的数组
  mean_l=zeros((m,n))
  mean_r=zeros((m,n))
  s=zeros((m,n))
  s_l=zeros((m,n))
  s_r=zeros((m,n))
  
  #保存深度平面的数组
  dmaps=zeros((m,n,steps))
  
  #计算图像块的平均值
  filters.uniform_filter(im_l,wid,mean_l)
  filters.uniform_filter(im_r,wid,mean_r)
  
  #归一化图像
  norm_l=im_l-mean_l
  norm_r=im_r-mean_r
  
  #尝试不同的视差
  for displ in range(steps):
     #将左边图像移动到右边,计算加和
     filters.uniform_filter(roll(norm_l,-displ-start)*norm_r,wid,s) #和归一化
     filters.uniform_filter(roll(norm_l,-displ-start)*roll(norm_l,-displ-start),wid,s)
     filters.uniform_filter(norm_r*norm_r,wid,s_r) #和反归一化
     
     #保存ncc的分数
     dmaps[:,:,displ]=s/sqrt(s_l*s_r)
     return argmax(dmaps,axis=2)
     

下面是载入图像,并使用该函数计算偏移图的完整例子:

import stereo

im_l=array(Image.open('scene1.row3.col3.ppm').convert('L'),'f')

im_r=array(Image.open('scene1.row3.col4.ppm').convert('L'),'f')

#开始偏移,并设置步长
steps=12
start=4

#ncc的宽度
wid=9
res = stereo.plane_sweep_ncc(im_l,im_r,start,steps,wid)

import scipy.misc
scipy.misc.imsave('depth.png',res)

图像聚类

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Python》计算机视觉编程 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce

随机推荐

  • 【机器学习 - 3】:数据归一化(最值归一化、均值方差归一化)

    文章目录 数据归一化的使用 最值归一化 均值方差归一化 常用 在sklearn中调用归一化 鸢尾花数据归一化 数据归一化的使用 为什么要使用数据归一化 举个例子 例如我们要使用KNN算法来预测肿瘤为良性肿瘤或恶性肿瘤 以下是一些数据 肿瘤大
  • JetBrains IntelliJ IDEA 20191.1中文版

    JetBrains IntelliJ IDEA 20191 1中文版推荐给大家 JetBrains IntelliJ IDEA 20191 1版本更新 修复了几个重要的修复程序 例如 KT 30117 KT 29427 KT 30137和K
  • 八大常用排序

    目录 前言 一 插入排序 二 希尔排序 三 选择排序 四 堆排序 五 冒泡排序 六 快速排序 七 归并排序 八 计数排序 九 稳定性 前言 此篇博客都是以升序为例 降序只需更改部分地方即可 所以只排一个 一 插入排序 单趟排序 如上图 在一
  • JAVA IO流综合案例

    需求 d aaa 3 jpg 复制到 d bbb 1 jpg 思路分析 先读去3 jpg 然后读的同时写入1 jpg package com yang import java io 需求 d aaa 3 jpg 复制到 d bbb 1 jp
  • 【CyberSecurityLearning 40】网络地址配置(Kali/CentOS)

    目录 一 关闭networkmanager服务 二 查看IP 三 配置IP 路由 DNS kali设置root用户登录 一 关闭networkmanager服务 因为这个 小电脑 开启后会替你管理网络 帮你去配 只要它开着会产生很多副作用
  • 背包问题,硬币问题

    至少有4种背包问题 1 01背包 2 部分背包 3 完全背包 4 多重背包 只有部分背包是个贪心问题 其他的都是以01背包为基础的动归问题 部分背包问题 把物品按价值密度从大到小排序 W i V i 然后从第一种物品开始 尽可能多拿当前物品
  • 小程序,Taro,生成图片并保存本地相册

    注意 不能在子组件里使用 import Taro Component Config from tarojs taro import index scss import View from tarojs components class Au
  • 什么是编译器宏?

    在阅读vue的官方文档时 提到了defineProps defineEmits defineExpose withDefaults都是编译器宏 那什么是宏定义 什么又是编译器宏呢 1 什么是宏定义 宏定义是一种将一段代码或值 进行简单替换的
  • 【C语言项目】多臂井径电子测井成像项目(一)

    目录 1 目的和意义 2 本章概述 3 串口R232 4 OpenGL 5 开发环境 6 环境配置 6 1 VS安装OpenGL 6 2 虚拟串口生成工具 7 成品速览 参考文献 1 目的和意义 本项目为获取矿藏地层的油气当量和及时精确地测
  • 【整理贴】截至2023.01.02 博主都写了哪些内容?

    博主虽然参加csdn已经四个年头了 开始创作其实是从21年9月确定了直博才开始的 由于是跨专业 很多基本知识都不牢固 总是忘记 这个锅还是不要给脑雾了 如果每次想用的时候能非常方便的复习就好了 而且通过整理也会知道哪里我原本是会的 还有哪里
  • 多通道图片的卷积

    一 多通道 channels 图片的卷积 网上很多资料都是单通道的卷积 很容易理解 但多通道的卷积更普遍 理解较复杂 需要单独提一下 彩色图像 一般都是RGB三个通道 channel 的 因此输入数据的维度一般有三个 长 宽 通道 比如一个
  • echars图表一进来默认显示tooltip

    写在前面 项目中碰到一个小优化项 echarts图表渲染一进来默认显示指定标记点信息窗即tooltip 效果类似 动手实现 核心是利用chart实例的dispatchAction方法 部分代码示例 注 vue环境
  • Java 进阶二知识--重拾者AIMING

    初级选手 Java 基础知识 重拾者AIMING Aimin20210819 公号 进阶一选手 Java 进阶一知识 重拾者AIMING Aimin20210819 公号 目录 1 参数数组和参数列表 重复使用参数 2 Java深浅拷贝
  • R语言常用数据管理

    1 变量的重命名 1 交互式编辑器修改变量名 若要修改数据集x中的变量名 键入fix x 即可打开交互式编辑器的界面 若数据集为矩阵或数据框 单击交互式编辑器界面中对应要修改的变量名 可手动输入新的变量名 若数据集为列表 则交互式编辑界面为
  • JSP原理

    1 什么是JSP Java Server Page Java服务器端页面 也和Servlet一样 用于动态Web技术 最大的特点 写JSP就像再写HTML 页面生成了java JSP本质上就是servlet 3 输出页面前增加的代码 1 r
  • ERROR: Cannot uninstall ‘wrapt‘. It is a distutils installed project and thus we cannot accurately..

    1 问题描述 pip install tensorflow 报错 ERROR Cannot uninstall wrapt It is a distutils installed project and thus we cannot acc
  • 什么是管理能力,管理者的品格有哪些

    走上管理岗位要明白 到底什么是管理能力 1 解决问题的能力 管理者必须面对许多难以解决的 甚至十分不明确的问题 但是只要采用合 适的方法 几乎所有的问题都能成功解决 2 沟通协调的能力 管理者在日常工作中妥善处理好上级 同级 下级等各种关系
  • IDEA产生及相应的应用

    思考 在用记事本编写程序代码的过程中 需要配合使用各种命令在控制台调控编译 给我们的实际操作带来了不小的工作量 如果初学者不能够调整好心态一步步操作 很容易放弃 如何能够让初学者和开发者用起来更方便快捷呢 深度的思考就会有创新 由此一个新的
  • 区块链开发指南_区块链软件开发详解

    开发业务层区块链应用 Hyperledger fabric目前支持java nodejs go和python语言的sdk 供用户选择用不同的语言开发上层应用 使用相应的sdk调用部署在区块链上的链码 以下示例中我们选择使用go语言开发业务层
  • 《Python》计算机视觉编程

    基本的图像操作处理 PIL 目前pycharm使用的是pillow库 from PIL import Image pil im Image open empire jpg 上述代码的返回值pil im是一个PIL图像对象 图像的颜色转换可以