【转载请注明出处: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()
通达分离与合并效果图: