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()



通达分离与合并效果图:








posted @ 2014-06-30 14:04  Leytton  阅读(276)  评论(0编辑  收藏  举报