文章目录
- 简介
- 从零开始学Python
- 准备工作
- 正式开始学习
- 输出“hello Word!”
- 打开一张图片
- 正确输出一副图片
简介
我为什么要学Python?
我目前是在看数字图像处理的书,里面的各种图像处理方法需要实际运行一下,加深理解。实验室师兄推荐使用Python。所以我开始学Python。
我的编程的基本功:
我之前没学过Python,但是,我学过C语言和一些数据结构,但是时间有点久,只记得一些语法和数据组合的方式,这是我的基本情况。
写这个博客的目的:
主要目的是记录学习Python过程中遇到的所有问题。是的所有问题。
从零开始学Python
准备工作
Python之前只是听说过,但没用过,现在要学了,怎么办?
照着视频把Python下载安装好,过程很顺滑,没有什么问题。
说明一下我电脑系统是win7_64位的。环境变量什么的问题我没出现。
编译器的话我没装别的,就是用自带的IDLE。
当时也纠结这个编译器问题。这个视频里面说了编译器问题,我就没有安装别的编译器了。这也是我选择这个视频的原因。不光告诉你怎么做,还告诉你为什么这样做。
正式开始学习
输出“hello Word!”
首先避免不了,使用Python输出“hello Word!”
print ('hello word')
hello word
我对C语言比较熟悉。所以对比一下,第一个差别就是Python输出时没有调用头文件,可以直接输出。这个应该是编译器自带的所以不需要在调用别的文件。
打开一张图片
先打开一张图片(参考图片打开的几种方法)
这里需要注意的是:
我们的目的是为了打开一张图片,记得我们的目的,只要是能打开图片的函数,我们都可以使用一下,不要纠结实现方法是在哪个库函数中。
我当时搜索打开图片的方式,最先找到的是使用matplotlib.pyplot库里的imread函数,之后打开图片后,打印出数据看了一下,和我理解的图像的像素值不一样。所以由折腾了半天,如何打开为灰度图像,一直找不到合适的,找到的大多数是使用cv2这个库。
当时是吃了秤砣铁了心,就是不用CV2这个库。结果不得不说真香。
下面这幅图使用Python打开并输出
代码及调试过程如下
import matplotlib.pyplot as plt
#与C语言的#include<> 的类似。加载一个现有的数据库进来。
import cv2
import numpy as np
#运行的时候,提示缺哪个库我们就下载安装对应的库。
#"https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy"这是下载官网。
#里面的库好多,我担心用不了,所以我是直接打开cmd,使用pip install 数据包名称
#如果失败,按照之前下载的版本选择数据包,比如我之前的数据包的版本是38,我使用的系统
#是win64 找到对应的数据包名称,对应的版本号和系统。下载。
#之后再下载下的数据包问价下,使用shift+右键,在当前路径下打开cmd。
#之后使用“pip install 下载下来的数据包名称”记得数据包名称是要带后缀的。
#图片地址,后期可以改为外部输入
imgjpg_path = r"E:\Laboratory documents\DIP_study_note\image\picture.jpg"
imgpng_path = r"E:\Laboratory documents\DIP_study_note\image\picture.png"
#使用CV2的函数打开图片
#与C语言中的文件读取类似,C语言是要定义一个文件指针,然后调用文件打开函数,
#将文件地址传递过去,最后返回文件的指针。这里有些类似,但是不需要事先声明定义变量。
image1 = cv2.imread(imgjpg_path)
image2 = cv2.imread(imgpng_path)
#imread函数有两个形参,首先是图像的文件名(索引地址),第二个参数flags用于指定以什么样
#的格式来读取图像,
#flags=1,代表CV_LOAD_IMAGE_UNCHANGED方式,即原始格式,也是默认参数。
#flags=2,代表CV_LOAD_IMAGE_GRAYSCALE方式,即以灰度图像格式读取图像。
#flags=3,代表CV_LOAD_IMAGE_COLOR方式,即以BGR格式读取图像。
#两种图片格式打开是我记得是有差异的。再在这里验证一下
#输出读进来的文件
#print函数省略参数end时,默认end="\n"
print("jpg_image_shape:",end = ' ')
print(image1.shape)
#shae是个参数,不是函数不要加括号
print("png_image_shape:",end = ' ')
print(image2.shape)
#>>>jpg_image_shape: (4000, 3000, 3)
#>>>png_image_shape: (4000, 3000, 3)
cv2.imshow('jpg_image',image1)
cv2.waitKey()
显示出来是这样。明显不对劲。显示出了左上角,我猜测试图像太大导致。
换个别的输出方式
正确输出一副图片
#使用plt中带的显示函数
plt.imshow(image1)
plt.title('jpg_image')
plt.show()
这次输出全部内容了,但是有问题,下图
颜色明显不正常。这个颜色异常,是因为cv2的imread函数读取彩色图像后,存储RGB三个同道是按照B、G、R的顺序存储的,而我调用plt的输出,会直接将以RGB顺序输出,所以,颜色就异常了。
读取图片时,将三个通道数据分割开来。再重新以RGB顺序组合在输出图像。
B,G,R = cv2.split(image1)
#将三个通道的数据分割开来
merged_image1 = cv2.merge([R,G,B])
#将三个通道数据合并起来
#使用plt中带的显示函数
plt.imshow(merged_image1)
如上图,图片显示正常了。
图片现在可以读取了和显示了,后面开始进行对图像的各种操作。