python分块处理功能_Python-numpy实现灰度图像的分块和合并方式

26.jpg

我就废话不多说了,直接上代码吧!

from numpy import *

import numpy as np

import cv2, os, math, os.path

from PIL import Image

base="F:\Spy_CNN\pythonCode\cvSPY\cvTest\LBP\LBPImag3\"

base2="F:\ProgrameCode\FaceDataLib\orl_Arry\"

imageOld=cv2.imread(base2+"s1_1.bmp")

image=cv2.cvtColor(imageOld,cv2.COLOR_BGR2GRAY)

"""图像的合成"""

H,W=image.shape#(112, 92)

kuai=5

a=1#为了好调程序

maskx,masky = H/kuai,W/kuai #29 14

toImage=np.zeros((H+(kuai-1)*a,W+(kuai-1)*a))

toImage.shape

#您画画图,总结规律,就可以想出来了

for i in range(kuai):

for j in range(kuai):

"""float64 array"""

faceZi=image[int(i*maskx): int((i+1)*maskx),int(j*masky) :int((j+1)*masky)]

cv2.imwrite(base+str(i)+str(j)+".bmp",faceZi)

# toImage[int(i*maskx)+a: int((i+1)*maskx)+a,int(j*masky)+a :int((j+1)*masky)+a]=faceZi

toImage[int(i*maskx)+i: int((i+1)*maskx)+i,int(j*masky)+j :int((j+1)*masky)+j]=faceZi

cv2.imwrite(base+"toImage.bmp",toImage)

#最简单的,直接在灰度图像上画出一条黑线,只是会丢失一些像素的数据

for i in range(1,kuai):

print(i)

toImage[int(i*maskx),:]=0

toImage[:,int(i*masky)]=0

cv2.imwrite(base+"toImage.bmp",toImage)

以上这篇Python-numpy实现灰度图像的分块和合并方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用Python代码实现图像的直方图均衡,分别包括基本均衡算法、分块均衡算法和局部均衡: 首先,我们需要导入必要的库和读取一张待处理的图片: ```python import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('lena.jpg', 0) ``` 接下来,我们先实现基本均衡算法。对于一幅灰度图像,其直方图为图像中每个灰度级出现的频率。我们可以通过计算每个灰度级出现的概率来得到直方图。然后,将直方图归一化后,再通过累计概率得到新的灰度级。最后,将新的灰度级映射回原图像中即可。 ```python def basic_histogram_equalization(img): hist, bins = np.histogram(img.flatten(), 256, [0, 256]) cdf = hist.cumsum() cdf_normalized = cdf * hist.max() / cdf.max() img_equalized = np.interp(img.flatten(), bins[:-1], cdf_normalized) img_equalized = img_equalized.reshape(img.shape) return img_equalized.astype('uint8') img_basic_eq = basic_histogram_equalization(img) ``` 下面,我们来实现分块均衡算法。这种方法将图像划分成多个子块,然后对每个子块进行直方图均衡。这样可以减少计算量,减小直方图不均衡的影响。 ```python def block_histogram_equalization(img, block_size=16): img_equalized = np.zeros_like(img) h, w = img.shape for i in range(0, h, block_size): for j in range(0, w, block_size): block = img[i:i+block_size, j:j+block_size] block_equalized = basic_histogram_equalization(block) img_equalized[i:i+block_size, j:j+block_size] = block_equalized return img_equalized.astype('uint8') img_block_eq = block_histogram_equalization(img) ``` 最后,我们来实现局部均衡算法。这种方法将图像分成若干个局部区域,然后在每个局部区域内进行直方图均衡。这样可以保留图像的细节信息,同时避免过度增强图像的高频内容。 ```python def local_histogram_equalization(img, kernel_size=(3, 3)): img_equalized = np.zeros_like(img) h, w = img.shape k_h, k_w = kernel_size for i in range(h): for j in range(w): i_min = max(i-k_h//2, 0) i_max = min(i+k_h//2, h-1) j_min = max(j-k_w//2, 0) j_max = min(j+k_w//2, w-1) block = img[i_min:i_max+1, j_min:j_max+1] block_equalized = basic_histogram_equalization(block) img_equalized[i, j] = block_equalized[k_h//2, k_w//2] return img_equalized.astype('uint8') img_local_eq = local_histogram_equalization(img) ``` 最后,我们可以将原图像和三种直方图均衡的结果进行可视化比较: ```python plt.figure(figsize=(10, 10)) plt.subplot(2, 2, 1) plt.imshow(img, cmap='gray') plt.title('Original Image') plt.axis('off') plt.subplot(2, 2, 2) plt.imshow(img_basic_eq, cmap='gray') plt.title('Basic Histogram Equalization') plt.axis('off') plt.subplot(2, 2, 3) plt.imshow(img_block_eq, cmap='gray') plt.title('Block Histogram Equalization') plt.axis('off') plt.subplot(2, 2, 4) plt.imshow(img_local_eq, cmap='gray') plt.title('Local Histogram Equalization') plt.axis('off') plt.show() ``` 运行代码后,就可以看到原图像和三种直方图均衡的结果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值