# -*- coding:utf-8 —*-import numpy as npimport 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
新闻热点
疑难解答