图像处理基础

这是我们要处理的图片,不知道干嘛

 

应用matloitlib库:https://blog.csdn.net/JohinieLi/article/details/69389980 

 

取第一层颜色

 

 

 灰度图

 

 1 import matplotlib.pyplot as plt #show
 2 import matplotlib.image as mping #read
 3 import numpy as np
 4 def picsh(x):
 5   fis=mping.imread(x)
 6   print(fis.shape)
 7   return fis
 8   plt.figure(1)
 9 
10 plt.imshow(fis)
11 
12 plt.axis('off')
13 plt.show()
14 
15 pic='linelabel.jpg'
16 fis=picsh(pic)
17 
18 gray=np.dot(fis[...,:3],[0.299,0.587,0.114])
19 plt.imshow(gray,cmap='Greys_r')
20 plt.show()

 

 

  
  方法1:
        灰度化后的R=(处理前的R + 处理前的G +处理前的B)/ 3
        灰度化后的G=(处理前的R + 处理前的G +处理前的B)/ 3
        灰度化后的B=(处理前的R + 处理前的G +处理前的B)/ 3

 

 tip:这里要注意生成的矩阵含义。[高,宽,RGB],设置的时候捣鼓了好久都没发现问题。。

   方法2:
         灰度化后的R =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11
         灰度化后的G =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11
         灰度化后的B =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

 

 

傻瓜的我用的是循环,因为对点乘不熟:

for i in range(gray1.shape[0]):
  for j in range(gray1.shape[1]):
    gray1[i,j,0]=gray1[i,j,0]*0.3+gray1[i,j,1]*0.59+gray1[i,j,2]*0.11
    gray1[i,j,1]=gray1[i,j,0]
    gray1[i,j,2]=gray1[i,j,0]

 

 

 看有人用cmap实现灰度

def main():
  pic='linelabel.jpg'
  fis=picsh(pic)
  gray=np.dot(fis[...,:3],[0.299,0.587,0.114])
  mping.imsave('grallb.jpg',gray)
 #  plt.imshow(gray)
  plt.imshow(gray,cmap='Greys_r')
  plt.show()

 

 

想减少for循环带来的延迟,认真研究数组,https://baijiahao.baidu.com/s?id=1638823188602684743&wfr=spider&for=pc,发现这个,没事看看

 如果不行,就坐标转置,先放在这里,https://www.cnblogs.com/wildbloom/p/7928237.html

 

mat()和array()生成矩阵 的对比:

首先,mat() 函数与array()函数生成矩阵所需的数据格式有区别,mat()函数中数据可以为字符串以分号(;)分割或者为列表形式以逗号(,)分割,而array()函数中数据只能为后者形式。

 

经过我锲而不舍的探索,得到了这个。用矩阵乘法,速度提高了好几倍,性能不够,算法来凑,不容易啊。就是不明白为什么出现了反色。

 

对了,之前有过模糊的问题,是浮点数的原因,记录如下

 

正确的代码:

 1 import matplotlib.pyplot as plt #show
 2 import matplotlib.image as mping #read
 3 import numpy as np
 4 
 5 def main():
 6   pic='linelabel.jpg'
 7   fis=mping.imread(pic)
 8   gray1=fis
 9   f=open("wrong_out.txt","w")
10 
11   ggg=np.zeros([1920,1080,3])
12   for i in range(gray1.shape[0]):
13     ggg[i]=np.dot(gray1[i],[[0.3],[0.59],[0.11]])
14 #数值转换,浮点数变整型
15   ggg=ggg.astype(int)
16   print(ggg,file=f)
17   f.close()
18   mping.imsave('gre31.jpg',ggg)
19   plt.imshow(ggg)
20   plt.axis('off')
21   plt.show()
22 
23 if __name__=='__main__':
24   main()
View Code

 

 

二值化

到了这一步我是真高兴。但是新问题来喽,因为电脑问题,我在避免for循环。。。。

np.mean(gray1),取数组平均值

 

 

 

参考文献

1.http://blog.sina.com.cn/s/blog_13c6397540102wqtt.html                          灰度处理

2.https://blog.csdn.net/qq_33363973/article/details/79894982                     numpy矩阵中的省略号

3.https://blog.csdn.net/xinjieyuan/article/details/81429048?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1              numpy矩阵中的冒号

4.https://blog.csdn.net/lanchunhui/article/details/66972783           matploitlib可视化

 5.https://www.cnblogs.com/wj-1314/p/10244807.html           python 中numpy矩阵的用法

6.https://blog.csdn.net/u012149181/article/details/78913416        numpy.dot()的用法

7.https://www.cnblogs.com/shenxiaolin/p/11313101.html          Python 将numpy array由浮点型转换为整型

posted @ 2020-04-05 11:39  Yeve  阅读(219)  评论(0)    收藏  举报