天天看點

opencv-python像素的學習,以及numpy數組的操作今天學習像素的周遊,反轉,以及numpy的基本操作。

今天學習像素的周遊,反轉,以及numpy的基本操作。

用法:zeros(shape, dtype=float, order='C')

傳回:傳回來一個給定形狀和類型的用0填充的數組;

參數:shape:形狀

            dtype:資料類型,可選參數,預設numpy.float64

            dtype類型:t ,位域,如t4代表4位

                                 b,布爾值,true or false i,整數,如i8(64位)u,無符号整數,u8(64位)

                                f,浮點數,f8(64位)c,浮點負數,o,對象,s,a,字元串,s24

                               u,unicode,u24  order:可選參數,c代表與c語言類似,行優先;F代表列優先

以上借鑒于幫助文檔的翻譯

img[:, :, 2] = np.ones([400,400]) * 255
    
           

# img[:,:,2]是一種切片方式,冒号表示該次元從頭到尾全部切片取出

# 是以img[:,:,2]表示切片取出所有行,所有列的第三個通道(索引為2)

# 右側首先建立了一個400*400的二維數組,元素初始化為1,再乘上255,所有元素變為255

# 注意右側400*400的二維數組與左側切片部分形狀相同,是以可以指派

# 即所有行,所有列的第三個通道(R)的值都變為255,一二通道(BG)仍為0,即所有像素變為紅色BGR(0,0,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]
    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)


#上述自定義函數的功能是像素取反,當然,opencv自帶像素取反方法bitwise_not(),不需要這麼麻煩
def inverse(img):
    """此函數與access_pixels函數功能一樣"""
    image1 = cv.bitwise_not(img)
    cv.imshow("pixels_demo",image1)


def creat_image(): #通過像素點建立自己的圖檔
    img = np.zeros([400,400,3],np.uint8) #傳回來一個給定形狀和類型的用0填充的數組
    '''zeros(shape, dtype=float, order='C')'''
 5)
    cv.imshow("NEW",img)
    cv.imwrite("C:/Users/idmin/Desktop/img/img2.jpg",img)


src = cv.imread("C:/Users/idmin/Desktop/img/img1.jpg") #blue,green,red
#cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
t1 = cv.getTickCount()#得到目前的時間片
#access_pixels(src)
inverse(src)
creat_image()
t2 = cv.getTickCount()
time = (t2-t1)/cv.getTickFrequency()
print("time:%s ms"%(time*1000)) #直接求得的時間是秒
cv.waitKey(0)
cv.destroyAllWindows()  # 關閉所有視窗
           

運作效果:

opencv-python像素的學習,以及numpy數組的操作今天學習像素的周遊,反轉,以及numpy的基本操作。