这篇文章记录python像素处理的基本方法方法

做的是14年的建模A题嫦娥登陆。

其中一个问题是这样的

如何选择下面这个图(月球表面高度2400米处的照片)的嫦娥三号着陆点?

1. 读取图像

from scipy import misc
from scipy.misc import imread, imresize, imsave
import os
import seaborn as sns
import matplotlib.pyplot as plt
os.chdir('/Users/zhaohaibo/Desktop')# 读取图像
pic = imread('pic2400.jpg')
pic.shape  # (2300,2300)
pic.max()  # 218
pic.min() # 0
pic.dtype # dtype('uint8')# 使用sbs的palette变成一个带有颜色的图(目的?不知道。。)
sns.set()
sns.set_style("white")
pic2 = plt.imshow(pic)
plt.savefig('24003.jpg')

2.使用K-Means聚类
  • img = cv2.imread(‘图片’)之后,直接就可以查看每个点的像素值
  • 聚为8类,想象中大致就可以把平地那一类选出来了吧
import numpy as np
import cv2
from scipy import misc
from scipy.misc import imread, imresize, imsave
import os
import seaborn as sns
import matplotlib.pyplot as pl
os.chdir('/Users/zhaohaibo/Desktop')#对rgb图像kmeans聚类
img = cv2.imread('24003.jpg')
Z = img.reshape((-1,3))# convert to np.float32
Z = np.float32(Z)# define criteria, number of clusters(K) and apply kmeans()
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 8
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)# Now convert back into uint8, and make original image
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((img.shape))
cv2.imwrite('k=8.jpg',res2)

分别是彩色和黑白的聚类结果。

# 划出平地
from PIL import Image
i = 1
j = 1
img = Image.open("k=12.jpg")#读取系统的内照片
print (img.size)#打印图片大小
print (img.getpixel((4,4)))
# 要保留177 22 88
width = img.size[0]#长度
height = img.size[1]#宽度
for i in range(0,width):#遍历所有长度的点for j in range(0,height):#遍历所有宽度的点data = (img.getpixel((i,j)))#打印该图片的所有点print (data)#打印每个像素点的颜色RGBA的值(r,g,b,alpha)print (data[0])#打印RGBA的r值if (data[0]>=170 and data[0]<=180):#RGBA的r值大于170,并且g值大于170,并且b值大于170img.putpixel((i,j),(255,255,255,255))#则这些像素点的颜色改成白色
img = img.convert("RGB")#把图片强制转成RGB
img.save("1.jpg")#保存修改像素点后的图片

好像有点意思了,看起来平地被标成了白色。

提取rgb数值(想画3D图没成功)

法1
# 提取rgb的数值
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
from PIL import Image
import os
os.chdir("/Users/zhaohaibo/Desktop")
i = 1
j = 1
img = Image.open("k=12.jpg")#读取系统的内照片
print (img.size)#打印图片大小
print (img.getpixel((4,4)))  # 获取某点的像素值
# 要保留177 22 88
width = img.size[0]#长度
height = img.size[1]#宽度
x = []
y = []
z = []
for i in range(0,width):#遍历所有长度的点for j in range(0,height):#遍历所有宽度的点data = (img.getpixel((i,j)))x.append(data[0])y.append(data[1])z.append(data[2])
x = np.array(x)
y = np.array(y)
z = np.array(z)
x = x.reshape(214,215)
y = y.reshape(214,215)
z = z.reshape(214,215)
网上找了另一个简单的方法
image_path = "HOPE.png"from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot
from PIL import Imagefig = pyplot.figure()
axis = fig.add_subplot(1, 1, 1, projection="3d") # 3D plot with scalar values in each axisim = Image.open(image_path)
r, g, b = list(im.getdata(0)), list(im.getdata(1)), list(im.getdata(2))axis.scatter(r, g, b, c="#ff0000", marker="o")
axis.set_xlabel("Red")
axis.set_ylabel("Green")
axis.set_zlabel("Blue")
pyplot.show()
选择最佳着陆点
# 提取rgb的数值
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
from PIL import Image
import os
os.chdir("/Users/zhaohaibo/Desktop")img = Image.open("face.jpg")
width = img.size[0]#长度
height = img.size[1]#宽度
def pi(i,j):return img.getpixel((i,j))[0]
for i in range(6, height-6):for j in range(6, width-6):if(pi(i,j)==255 and pi(i+5,j+5)==255 and pi(i-5,j-5)==255 and pi(i-5,j+5)==255 and pi(i+5,j-5)==255):img.putpixel((i,j),(0,255,0,255))
img = img.convert("RGB")
def check_pi(i,j):if(img.getpixel((i,j))==(0,255,0)):return Trueelse:return False
for i in range(2, height-2):for j in range(2, width-2):if(check_pi(i,j) and check_pi(i-2,j-2) and check_pi(i-2,j+2) and check_pi(i+2,j-2) and check_pi(i+2,j+2)):img.putpixel((i,j),(0,0,255,255))
area = []
for i in range(2,height-2):for j in range(2,width-2):if(img.getpixel((i,j))==(0,0,255)):area.append((i,j))
for i in range(len(area)-6):if(area[i-7][0]==area[i+6][0]):print((area[i]))
(167, 48)

所以一些绿色点是好的着陆区域?绿色点里面蓝色点是好的着陆点?

Python像素点图像处理相关推荐

  1. 干货 | 用Python做图像处理:图像导数实战

    导读:数量庞大的图像和视频充斥着我们的生活.我们需要对图片进行检索.分类等操作时,利用人工手段显然是不现实的.于是,计算机视觉相关技术便应运而生,并且得到了快速的发展.本文以时下最流行的Python语 ...

  2. Python+Opencv图像处理新手入门教程(三):阈值与二值化

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...

  3. Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图

    一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...

  4. python+opencv图像处理之七:直方图均衡化

    python+opencv图像处理之七:直方图均衡化 目录 python+opencv图像处理之七:直方图均衡化 一.直方图均衡化 二.直方图绘制 三.直方图均衡化 四.有限对比适应性直方图均衡化 一 ...

  5. python图像处理---python的图像处理模块Image

    https://blog.csdn.net/jiaoyangwm/article/details/79293272 [python图像处理]python的图像处理模块Image 版本信息:2.7.11 ...

  6. Python+OpenCV图像处理(一篇全)

    参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...

  7. python skimage图像处理(一)

    python skimage图像处理(一) This blog is from: https://www.cnblogs.com/wangxiaocvpr/p/11656603.html 基于pyth ...

  8. python skimage图像处理

    python skimage图像处理(一) jiandanjinxin关注 22017.09.26 14:31:04字数 5,913阅读 103,968 本文转自 python数字图像处理 基于pyt ...

  9. Python OpenCV 图像处理之直方图的应用,取经之旅第 26 天

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧. Python OpenCV 基础知识铺垫 cv2.compareHist 函数 橡皮擦的小节 基础知识铺垫 上篇博客 Py ...

最新文章

  1. jdbc事物回滚是否需要重新commit 不需要
  2. 一次Rootkit实施失败记(图解)
  3. 百度坐标转换火星坐标UDF
  4. python变量类型声明_python中可以声明变量类型吗
  5. 电脑和服务器ip作用是什么意思,分配ip地址的服务器-服务器IP地址和客户端IP地址有什么区别? – 手机爱问...
  6. cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记
  7. Linux vms windows,Windows、Windows NT、DOS、VMS、Linux都是微机上用的操作系统。
  8. 【Splay】波动值之和(金牌导航 Splay-1)
  9. 【Spring】入门HelloWorld
  10. 1+X web中级 Laravel学习笔记——Eloquent ORM查询、更新、删除、新增
  11. 应用程序初次运行数据库配置小程序(Java版)
  12. 清华大学 ucore-lab0 MacOS
  13. java Calendar的学习分享
  14. Hadoop_17_MapRduce_案例2_实现用户手机流量统计(ReduceTask并行度控制)
  15. 增广拉格朗日 matlab,大连理工优化方法增广拉格朗日方法MATLAB程序
  16. Sql server中 如何用sql语句创建视图
  17. undefined reference to ‘android::CallStack::CallStack
  18. 基于SSM的酒店客房管理系统的设计(包含数据库、完美运行、可远程调试)
  19. Java //PP2.14 按照以下要求修改程序Snowman: ·在其身上添加两个红色按钮。·将雪人的表情由笑脸变成皱眉。·把太阳移动到图片的右上角。·在图片左上角显示你的名字。。。
  20. PMI-PBA 商业分析师 认证简介

热门文章

  1. Comsol Multiphysics 粉末冶金过程计算机仿真
  2. 帆软和思迈特软件哪个比较好,深度测评
  3. 思迈特软件Smartbi:数据可视化
  4. 作为阿里云年薪500k大数据工程师必须掌握以下三种技能
  5. ORCA(RVO2)算法优化整理版
  6. 两种方法绘制笑脸(需要用到canvas标签)
  7. 软工笔记————瀑布模型与敏捷软件开发的比较
  8. Nginx 配置https证书
  9. 2021-2027全球与中国辉光放电光谱仪市场现状及未来发展趋势
  10. python布尔型数组_对numpy中布尔型数组的处理方法详解