opencv入门基础(一)图像的基本操作
一.图像基本操作语句
基本语句:
1.读取图片: cv2.imread(“图片地址”)
2.获取图片的形状: img.shape,返回一个(rows,heights,channaels)
3.获取图片的大小: img.size,返回rows * heights * channels的值
4.显示图片: cv2.imshow(“标题”,图片名称)
5.等待: cv2.waitKey(0)
6.关闭: cv2.destoryAllWindows()
import cv2 # 导入cv2库,cv2又叫opencv-python
img = cv2.imread("C:/tmp/logo.png") # 注意不在同一目录下的文件目标读取方式
print(img.shape) # (655, 655, 3)
print(img.size) # 1287075
b,g,r = img[6,40] # 查看某个像素点的颜色组成
print(b,g,r) # 255 255 255
img[6,10] = (0,0,0) # 改变某一个像素点的颜色组成,直接赋值即可
cv2.imshow("hah",img) # 参数给定需要先给一个题目,再给输出图片名称
cv2.waitKey(0) # 等待,要不只显示一下就关闭窗口了
cv2.destroyAllWindows()
二.RGB顺序转换
cv2.split()函数在读取图片颜色三通道信息的时候,默认读取顺序为BGR,转换为RGB的顺序用cv2.merge()函数。
import cv2
import matplotlib.pyplot as plt
img_logo = cv2.imread("C:/tmp/JLUlogo.png")
b,g,r = cv2.split(img_logo) # 获取整张图片的b,g,r
img_new = cv2.merge([r,g,b]) # 调整b,g,r的顺序
plt.subplot(121)
plt.imshow(img_logo) # 原图片
plt.subplot(122)
plt.imshow(img_new) # 新图片
plt.show()
结果为下:(在电脑中打开该图片时,是右图的样子,即按照RGB顺序显示)
三.argparse模块读取图片
argparse模块使编写用户友好的指令行接口变得容易,程序定义了它需要的参数,而argparse将找出如何从sys.argv中解析这些参数,argparse模块还会自动生成帮助和使用消息,并在用户给程序提供无效参数时发出错误消息。一般使用是,模块使用格式较为固定,记住即可,以下为实例:
import cv2
import argparse
parser = argparse.ArgumentParser() # 读取参数
parser.add_argument("path_image",help="path to input the image") # 添加参数
args = parser.parse_args() # 解析参数
args_dict = vars(parser.parse_args()) # 加载图片
# {"path_image" : "image/logo.png"},字典形式
img = cv2.imread(args_dict["path_image"]) # 以字典的形式获取相应的值
cv2.imshow("BITlogo",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果为(注意要在终端Terminal下运行,而不是run,终端的位置要选对!):
四.argparse模块读取、灰度处理、保存图片
import cv2
import argparse
# 获得参数
parser = argparse.ArgumentParser()
# 添加参数
parser.add_argument("img_input",help="read one image")
parser.add_argument("img_output",help="save the pricessed image")
# 解析参数,以字典形式保存参数和值
args = vars(parser.parse_args())
# 加载图片,[]为字典中的键值
img = cv2.imread(args["img_input"])
# 灰度处理,将img灰度化
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 保存图片
cv2.imwrite(args["img_output"],img_gray)
# 显示图片
cv2.imshow("Original Image",img)
cv2.imshow("Gray Image",img_gray)
cv2.waitKey()
cv2.destroyAllWindows()
结果为(依然要在终端Terminal下运行):