OpenCV数字图像处理(5) 像素访问之添加椒盐实例 通道分离与合并
【转载请注明出处:http://blog.csdn.net/leytton/article/details/35991945】
配套使用的OpenCV版本:2.4.9 ; Python版本:2.7
主要参考文章(感谢作者分享)
1、OpenCV
Python教程(2、图像元素的访问、通道分离与合并) http://blog.csdn.net/sunny2038/article/details/9080047
2、[OpenCV]如何实现人工添加椒盐(Python)http://www.xuebuyuan.com/1378730.html
大部分参考文章1,注释参考文章2
人工添加椒盐主要思想:
随机产生n个坐标(x,y),
使得灰度图的像素img[x][y]=255
RGB图的像素img[x][y][0]=img[x][y][1]=img[x][y][2]=255
人工椒盐代码:
# -*- coding: utf-8 -*- import cv2 import numpy as np # 随机添加椒盐的函数 def salt(img, n): saltImage = img.copy() #复制图像 for k in range(n): # 循环添加n个椒盐 i = int(np.random.random() * img.shape[1]); # 随机选择椒盐的坐x标 j = int(np.random.random() * img.shape[0]); # 随机选择椒盐的坐y标 if img.ndim == 2: # 如果是灰度图 saltImage[j,i] = 255 elif img.ndim == 3: # 如果是RBG图片 saltImage[j,i,0]= 255 saltImage[j,i,1]= 255 saltImage[j,i,2]= 255 return saltImage img = cv2.imread("dog.jpg") saltImage = salt(img, 500) cv2.imshow("image", img) cv2.imshow("Salt", saltImage) cv2.waitKey(0) cv2.destroyAllWindows()
效果图:
通道分离与合并代码:
<pre name="code" class="python"># -*- coding: utf-8 -*- import cv2 import numpy as np img = cv2.imread("hehua.jpg") #通道分离 b = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype) g = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype) r = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype) b[:,:] = img[:,:,0] #img[i][j] 表示[蓝色,绿色,红色]的明亮度 g[:,:] = img[:,:,1] r[:,:] = img[:,:,2] #通道合并 merged = cv2.merge([b,g,r]) cv2.imshow("Blue", r) cv2.imshow("Red", g) cv2.imshow("Green", b) cv2.imshow("Merged", merged) cv2.waitKey(0) cv2.destroyAllWindows()
通达分离与合并效果图: