输出结果如图6-4所示,该代码调用matplotlib.pyplot库绘制了四幅图像,其中(a)表示原始图像,(b)表示等级为2的量化处理,(c)表示等级为4的量化处理,(d)表示等级为8的量化处理 。
文章插图
# coding: utf-8import cv2import numpy as npimport matplotlib.pyplot as plt#读取原始图像img = cv2.imread('people.png') #图像二维像素转换为一维data = https://www.isolves.com/it/cxkf/yy/Python/2022-09-14/img.reshape((-1,3))data = np.float32(data)#定义中心 (type,max_iter,epsilon)criteria = (cv2.TERM_CRITERIA_EPS +cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)#设置标签flags = cv2.KMEANS_RANDOM_CENTERS#K-Means聚类 聚集成4类compactness, labels, centers = cv2.kmeans(data, 4, None, criteria, 10, flags)#图像转换回uint8二维类型centers = np.uint8(centers)res = centers[labels.flatten()]dst = res.reshape((img.shape))#图像转换为RGB显示img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)#用来正常显示中文标签plt.rcParams['font.sans-serif']=['SimHei']#显示图像titles = [u'原始图像', u'聚类量化 K=4'] images = [img, dst] for i in xrange(2):plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'),plt.title(titles[i])plt.xticks([]),plt.yticks([]) plt.show()
输出结果如图6-4所示,它通过K-Means聚类算法将彩色人物图像的灰度聚集成四种颜色 。
文章插图
文章插图
文章插图
# -*- coding: utf-8 -*-import cv2import numpy as npimport matplotlib.pyplot as plt#读取原始图像img = cv2.imread('scenery.png')#获取图像高度和宽度height = img.shape[0]width = img.shape[1]#采样转换成16*16区域numHeight = height/16numwidth = width/16#创建一幅图像new_img = np.zeros((height, width, 3), np.uint8)#图像循环采样16*16区域for i in range(16): #获取Y坐标y = i*numHeight for j in range(16): #获取X坐标x = j*numwidth #获取填充颜色 左上角像素点b = img[y, x][0]g = img[y, x][1]r = img[y, x][2] #循环设置小区域采样 for n in range(numHeight): for m in range(numwidth): new_img[y+n, x+m][0] = np.uint8(b) new_img[y+n, x+m][1] = np.uint8(g) new_img[y+n, x+m][2] = np.uint8(r)#显示图像cv2.imshow("src", img)cv2.imshow("", new_img)#等待显示cv2.waitKey(0)cv2.destroyAllWindows()
输出结果如下图所示:
文章插图
# -*- coding: utf-8 -*-import cv2import numpy as npimport matplotlib.pyplot as plt#读取原始图像img = cv2.imread('scenery.png')#获取图像高度和宽度height = img.shape[0]width = img.shape[1]#采样转换成8*8区域numHeight = height/8numwidth = width/8#创建一幅图像new_img = np.zeros((height, width, 3), np.uint8)#图像循环采样8*8区域for i in range(8): #获取Y坐标y = i*numHeight for j in range(8): #获取X坐标x = j*numwidth #获取填充颜色 左上角像素点b = img[y, x][0]g = img[y, x][1]r = img[y, x][2] #循环设置小区域采样 for n in range(numHeight): for m in range(numwidth): new_img[y+n, x+m][0] = np.uint8(b) new_img[y+n, x+m][1] = np.uint8(g) new_img[y+n, x+m][2] = np.uint8(r)#显示图像cv2.imshow("src", img)cv2.imshow("Sampling", new_img)#等待显示cv2.waitKey(0)cv2.destroyAllWindows()
推荐阅读
- python中模块与包
- 实现 Python | 继承关系
- 跨平台Python异步聊天机器人框架,支持QQ、飞书、钉钉等渠道
- 4 步打包一个新的 Python 模块
- 实践更重要?实践的需要是推动认识在深度和广度
- 王一博|王一博方否认嫖娼被包养,还称不认识李某某,肖战也被牵扯
- 王一博|王一博辟谣嫖娼被包养,称不认识李某某,粉丝喊话要告肖战粉
- gnz48|王一博:不认识李易峰!网友立马扒出两人同框视频,被打脸了?
- 理想|买没买都可以看!美女带你详细体验理想L9:人形说明书在线教学
- 编程|胡渊鸣:import一个“太极”库 让Python代码提速100倍!