自学内容网 自学内容网

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)!