python安装了numpy却用不了且报错的解决方案和numpy的简单应用于图像处理及python基础语法
黑马程序员pyecharts部分数据资料在文章最下方获取!
1.报错情况如下:Error importing numpy:
解决方法:降低python和numpy的版本,我一开始下载安装的都是最新版的python和numpy,后来降低了版本后就不报错且可正常使用了,这里给出我使用的版本作为参考(记得卸载之前版本的python和numpy再重新安装),网上有python不同版本适配的python可以自行搜索,建议使用的python版本不要超过3.10。
2.1.使用python进行对图像进行傅里叶变换并显示原图和频谱图:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
image_path = 'D:/1212.jpg' # 这里需要换成自己图片的位置
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
# 傅里叶变换
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
# 计算频谱
magnitude_spectrum = 20 * np.log(np.abs(dft_shift) + 1)
# 显示原图
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.imshow(image, cmap='gray')
plt.title('original_image')
plt.axis('off')
# 显示频谱图
plt.subplot(122)
plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('magnitude_image')
plt.axis('off')
plt.show()
exit()
2.2.使用python实现小波变换融合两幅图像:
import cv2
import pywt # 需要安装pywt库
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
image1 = cv2.imread('D:/1313.jpg', cv2.IMREAD_GRAYSCALE) # 这里需要换成自己图片的位置
image2 = cv2.imread('D:/1414.jpg', cv2.IMREAD_GRAYSCALE) # 这里需要换成自己图片的位置
# 二维离散小波变换
c1 = pywt.dwt2(image1, 'haar')
c2 = pywt.dwt2(image2, 'haar')
# 融合小波系数
fused_cA = (c1[0] + c2[0]) / 2
fused_cH = (c1[1][0] + c2[1][0]) / 2
fused_cV = (c1[1][1] + c2[1][1]) / 2
fused_cD = (c1[1][2] + c2[1][2]) / 2
fused_c = (fused_cA.astype(np.float32),
(fused_cH.astype(np.float32),
fused_cV.astype(np.float32),
fused_cD.astype(np.float32)))
# 使用逆变换重建图像,并确保数据类型正确
fused_image = pywt.idwt2(fused_c, 'haar')
fused_image = np.clip(fused_image, 0, 255).astype(np.uint8)
# 显示原图
plt.figure(figsize=(12, 6))
plt.subplot(131)
plt.imshow(image1, cmap='gray')
plt.title('image1')
plt.axis('off')
plt.subplot(132)
plt.imshow(image2, cmap='gray')
plt.title('image2')
plt.axis('off')
# 显示融合后图像
plt.subplot(133)
plt.imshow(fused_image, cmap='gray')
plt.title('fused_image')
plt.axis('off')
plt.show()
exit()
效果图如下:
2.3.使用python对图片进行3×3和5×5的中值滤波对比效果:
import cv2
import matplotlib.pyplot as plt
# 读取图像
image_path = 'D:/1515.png' # 这里需要换成自己的图片位置
image = cv2.imread(image_path)
# 将读取到的图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 显示原始灰度图像
plt.figure(figsize=(10, 5))
plt.subplot(1, 3, 1)
plt.imshow(gray_image, cmap='gray')
plt.title('original_image')
plt.axis('off')
# 应用3×3窗口的中值滤波
median_filtered_image_3 = cv2.medianBlur(gray_image, 3)
# 显示3×3中值滤波后的图像
plt.subplot(1, 3, 2)
plt.imshow(median_filtered_image_3, cmap='gray')
plt.title('3×3')
plt.axis('off')
# 应用5×5窗口的中值滤波
median_filtered_image_5 = cv2.medianBlur(gray_image, 5)
# 显示5×5中值滤波后的图像
plt.subplot(1, 3, 3)
plt.imshow(median_filtered_image_5, cmap='gray')
plt.title('5×5')
plt.axis('off')
# 显示所有图像
plt.show()
exit()
效果对比图如下:
人生苦短,我用python(input/print)
python中常用的六种数据类型:
①int,float,complex,bool(True/False)
②字符串(string)(三种定义方式:单引号、双引号、三引号)
③列表(list):[元素1,元素2,。。。,元素N] #支持嵌套
④元组(tuple):(元素1,元素2,。。。,元素N) #不可修改
⑤集合(set):{元素1,元素2,。。。,元素N} #不支持下标索引,不可重复且无序
⑥字典(dictionary):{key:value。。。} #通过key找value
扩展(各个数据容器的常用操作):
# 列表(可修改,可重复)
列表名.index(元素) # 查找某元素在列表内的下标索引
列表名[下标]=值 # 修改指定下标索引的值
列表名.insert(下标,元素) # 插入元素
列表名.append(元素) # 追加元素
列表名.extend(数据容器) # 追加一批元素
del 列表名[下标] # 删除元素
列表名.remove(元素) # 删除某元素在列表中的第一个匹配项
列表名.clear() # 清空列表
# 元组(可修改,不可重复)
元组名.index(元素 # 查找某元素在列表内的下标索引
元组名.count(元素) # 返回元素的数量
len(元组名) # 返回元组的元素个数
# 字符串(不可修改)
字符串.index(字符串) # 返回字符串的起始下标
字符串.replace(字符串1,字符串2) # 返回一个2替换1的新字符串
字符串.split(分隔符) # 返回一个被分隔符分开的多个字符串的列表
字符串.strip() # 去除字符串前后空格后返回
# 集合(不可重复且无序)
集合名.add(元素) # 添加一个元素
集合名.remove(元素) # 移除指定元素并返回
集合名.pop() # 随机取出一个元素
集合名.clear() # 清空集合
# 字典(key→value)
字典[key] # 获取key对应的value值
字典[key]=value # 添加或更新字典
字典.pop(key) # 删除此key及对应value并返回此value
字典.keys() # 获取字典的全部key,可用于for循环遍历字典
数据容器的通用的操作:
①遍历(例如for循环遍历),② max(),③min(),④list()转换为列表,
⑤tuple()转换为元组,⑥str()转换为字符串,⑦set()转换为集合,⑧sorted()排序
type(被查看的数据)——查看数据的类型
强制转换:int(x),float(x),str(x)
计算:加(+),减(-),乘(*),除(/),整除(//),取余(%),求平方(**)
字符串格式化的两种方法:
①占位符:%s:字符串,%d:整型,%f:浮点型
②f“xxx{变量}xxx{变量}xxx”
(扩展:精度控制m.n ,m控制宽度,n控制小数点精度)
数字序列:range
range(num) # 不包含num本身,从0开始
range(num1,num2) # 从num1到num2的数字序列,不包含num2本身
range(num1,num2,step) # step为步长
循环:
if 条件:
(四个空格)。。。。。。。
else:
(四个空格)。。。。。。。
# 中间可加elif,类似else if
# 四个空格为python的语法格式
while 循环的条件:
(四个空格)。。。。。。。
for 临时变量 in 待处理的数据集:
(四个空格)。。。。。。。
# python中for理论上无法进行无限循环
continue # 跳过本次循环
break # 中断所在循环
函数:
def 函数名(传入参数):
(四个空格)。。。。。。。
(四个空格)return 返回值
# global关键字可将函数内定义的变量声明为全局变量
序列的常用操作——切片:(从一个序列中取出一个子序列)
语法:序列名【起始下标:结束下标:步长】(步长为负则从后往前切片)
不定长参数:
①*args,以元组的形式接受参数
②**kwargs,以字典的形式接受参数
lambda匿名函数:
lambda 传入参数:函数体(一次性函数,只可执行一行代码)
文件的操作:
# 打开文件
open(file,mode,encoding)
# file为文件地址,mode有r(读),w(写),a(追加),encoding为编码方式:UTF-8
# 读
read(num) # 指定长度读取,不指定读取全部
readline() #读取一行
readlines() #读取全部行,返回列表
# 写
write(内容)
flush() # 刷新内容到硬盘
# 关闭
close()
# 操作完文件一定记得关闭!!!
异常捕获:(异常具有传递性)
try:
# 可能发生异常的语句
except[异常 as 别名]:
# 出现异常的准备手段
[else:]
# 未出现异常时执行的语句
[finally:]
# 不管是否异常都会执行的代码
json数据:一种轻量式的数据交互格式(本质上是字符串)
(因形式上与python的字典和列表很像,故与python之间的交互很方便)
import json
json.dumps(data) # python数据转json
json.loads(data) # json数据转python
# ensure_ascii=False 确保中文正常转换
列表的sort方法(排序):
语法:列表.sort(key=选择排序依据的函数(可使用lambda函数),reverse=True/False)
(True表示降序,False表示升序)
面向对象(基于类创建对象)
通过百度网盘分享的文件:可视化案例数据.zip
链接:https://pan.baidu.com/s/1sS8kF0hQi91MkYCUI4xlTw?pwd=bsgn
提取码:bsgn
原文地址:https://blog.csdn.net/m0_69153234/article/details/143622003
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!