.改变图片每个像素点每个通道的灰度值

(一)

代码如下:

#遍历访问图片每个像素点,并修改相应的RGB
import cv2 as cv
def access_pixels(image):
    print(image.shape)
    height = image.shape[0]
    width = image.shape[1]
    channels = image.shape[2]
    print("width: %s  height: %s  channels: %s"%(width, height, channels))
    for row in range(height):
        for col in range(width):
            for c in range(channels):
                pv = image[row , col, c]        #获取每个像素点的每个通道的数值
                image[row, col, c]=255 - pv     #灰度值是0-255   这里是修改每个像素点每个通道灰度值
    cv.imshow("second_image",image)
src=cv.imread('E:\imageload\example.png')   #blue, green, red
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
t1 = cv.getTickCount()    #GetTickcount函数返回从操作系统启动到当前所经过的毫秒数
access_pixels(src)
t2 = cv.getTickCount()
time = (t2-t1)/cv.getTickFrequency()  #getTickFrequency函数返回CPU的频率,就是每秒的计时周期数
print("time : %s ms"%(time*1000) )    #输出运行时间
cv.waitKey(0)#如果没有这句话程序会一闪而过
cv.destroyAllWindows()#释放窗口

图片: .改变图片每个像素点每个通道的灰度值_第1张图片
图片: Alt
(二)

上述代码实现像素取反的运行时间较长,下面代码运用opencv自带的库函数可以使运行时间大大减少。

代码如下:

#调用opencv的库函数快速实现像素取反
import cv2 as cv
def inverse(img):
    img = cv.bitwise_not(img)   #函数cv.bitwise_not可以实现像素点各通道值取反
    cv.imshow("second_image", img)

src=cv.imread('E:\imageload\example.png')   #blue, green, red
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
t1 = cv.getTickCount()    #GetTickcount函数返回从操作系统启动到当前所经过的毫秒数
inverse(src)
t2 = cv.getTickCount()
time = (t2-t1)/cv.getTickFrequency()  #getTickFrequency函数返回CPU的频率,就是每秒的计时周期数
print("time : %s ms"%(time*1000) )    #输出运行时间
cv.waitKey(0)
cv.destroyAllWindows()

图片: .改变图片每个像素点每个通道的灰度值_第2张图片

转自https://www.cnblogs.com/FHC1994/p/8998337.html

你可能感兴趣的:(python,opencv)