(一)
代码如下:
#遍历访问图片每个像素点,并修改相应的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()#释放窗口
上述代码实现像素取反的运行时间较长,下面代码运用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()
转自https://www.cnblogs.com/FHC1994/p/8998337.html