Opencv转换图片为负片

image在计算机中存储的就是矩阵信息,shape信息为[height,width,C],其中height,width为图片的长宽信息。C代表图片的通道数(图片信息是保存为3通道的,即红绿蓝)。

因此只要循环遍历图片矩阵中的值,使用255减去该值即可。

手动反转代码

import cv2 as cv
import numpy as  np

def access_pixels(image):
    print(image.shape)
    height = image.shape[0]
    width = image.shape[1]
    channels = image.shape[2]
    #彩色图像的通道一般有三个,为RGB图像
    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#进行反向修改,会使图片变成负片
    cv.imshow("pixels_demo", image)
    #第一个参数是窗口的名称,第二个参数是照片的数据源。

if __name__ == '__main__':

    src = cv.imread("demo2.jpg")#blue, green red
    cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
    cv.imshow("input image",src)

    inverse(src)
    cv.waitKey(0)
    cv.destroyAllWindows()

结果:

opencv库: cv.bitwise_not()

import cv2 as cv
import numpy as  np

def inverse(image):
    dst = cv.bitwise_not(image)
    #像素取反的API等同于 access_pixels()中的取反操作。
    cv.imshow("inverse demo", dst)

if __name__ == '__main__':

    src = cv.imread("demo2.jpg")#blue, green red
    cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
    cv.imshow("input image",src)

    inverse(src)
    cv.waitKey(0)
    cv.destroyAllWindows()

结果与上面是一致的

你可能感兴趣的:(oepncv,opencv,人工智能,计算机视觉)