不多说,上代码,全在里面
# -*- coding:utf-8 —*-
import numpy as np
import cv2
# 目标:
# 获取像素值并修改
# 获取图像的信息
# 图像的RIO()
# 图象通道的拆分及合并
# step1: 获取图像的信息
# 读取图片 读入彩色图和灰度图
# color_img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)
# gray_img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_GRAYSCALE)
# 获取信息
# 图像的信息包括:行、列、通道、图像数据类型、像素数目
# print color_img.shape
# #(1050L, 700L, 3L) 代表的意思是:(行、列、通道数)\
# print color_img.size
# #2205000 代表的意思是:*个像素数
# print color_img.dtype
# #uint8 代表图像的类型,在OpenCV-python中经常出项数据类型不一致的错误,因此该属性特别重要
#获取并修改像素值
# 可以根据像素的行列坐标获取像数值,对于RGB模式的返回的是r,g,b的值,对于灰度图则返回灰度值
# 获取某个点的像素值
# color_px = color_img[100,100]
# gray_px = gray_img[100,100]
# print color_px, gray_px
# #[199 222 224] 220
# 修改末各点的像素值
# color_img[100,100] = [255, 255, 255]
# gray_img[100, 100] = 255
# 警告: Numpy是经过优化的进行矩阵快速计算运算包,所以不推荐逐个修改像素值,很慢,所以能用矩阵运算的绝不用循环
# 获得像素值更好的方法
# 不是很明白??? 好像和Numpy有点关系
# print color_img.item(10, 10, 2)
# #190
# color_img.itemset((10, 10, 2), 100)
# print color_img.item(10, 10, 2)
# # 100
# 图像的ROI
# ROI是使用Numpy索引来获得的
# 作用:对一幅图片的特定区域进行操作
# 情景:例如在一个想象中找到人的眼睛,则应该先找到脸,再找眼睛
# img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)
# pice_img = img[120:320, 300:450]
# cv2.namedWindow("show")
# # cv2.imshow("show", pice_img)
# img[420:620, 400:550] = pice_img
# cv2.imshow("show", img)
# if cv2.waitKey(0) == 27:
# cv2.destroyAllWindows()
# # elif cv2.waitKey(0) == ord("s"):
# 拆分及合并图像通道
# 有时我们需要分别对R、G、B三个通道分别惊醒操作,又是我们则要将一个地理通道分成BGR
# img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)
# b, g, r = cv2.split(img)
# print b, "\n\n"
# print g, "\n\n"
# print r, "\n\n"
# # 将红色通道全部变为0
# b = img[:,:,0]
# # 警告:cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用 Numpy 索引就尽量用。
# 为图像扩边(填充)
# 如果你想在图像周围创建一个边,就像相框一样,你可以使用cv2.copyMakeBorder() 函数。
# 这经常在卷积运算或 0 填充时被用到。
# 这个函数包括如下参数:
# • src 输入图像
# • top, bottom, left, right 对应边界的像素数目。
# • borderType 要添加那种类型的边界,类型如下
# – cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要 下一个参数(value)。
# – cv2.BORDER_REFLECT边界元素的镜像。比如: fedcba|abcde- fgh|hgfedcb
# – cv2.BORDER_REFLECT_101orcv2.BORDER_DEFAULT 跟上面一样,但稍作改动。
# 例如: gfedcb|abcdefgh|gfedcba
# – cv2.BORDER_REPLICATE重复最后一个元素。
# 例如: aaaaaa| abcdefgh|hhhhhhh
# – cv2.BORDER_WRAP 不知道怎么说了,
# 就像这样: cdefgh| abcdefgh|abcdefg
# • value 边界颜色,如果边界的类型是 cv2.BORDER_CONSTANT