opencv apprentissage trois: opérations sur les tableaux numpy

1. Lire une image et la sortie après avoir modifié le canal de couleur

L'image peut être obtenue: la matrice du nombre de lignes, du nombre de colonnes et du nombre de canaux. Les pixels de l'image peuvent être modifiés en utilisant la matrice. Le
code est le suivant:

import cv2 as cv  #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理

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)
    
src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
#blue green red
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)  #创建一个GUI
cv.imshow("input image", src) #对窗口图片进行展示
t1 = cv.getTickCount()
access_pixels(src)
t2 = cv.getTickCount()
time = (t2 - t1)*1000/cv.getTickFrequency()
print("time : %s" % time)
cv.waitKey(0)
cv.destroyAllWindows()  #释放所有的内存

Capture d'écran en cours d'exécution:
Insérez la description de l'image icicv :: getTickCount () peut être utilisé pour mesurer le temps d'exécution d'un morceau de code. Cette fonction renvoie le nombre de cycles d'horloge depuis le dernier démarrage.

Puisque ce dont nous avons besoin est le nombre de millisecondes qu'un certain segment de code exécute, nous avons également besoin d'une autre fonction cv :: getTickFrequency (). Cette fonction renvoie le nombre de cycles d'horloge par seconde.

2. Personnalisez une image multicanal

Fonctions utilisées: les
codes zéros et uns sont les suivants:

import cv2 as cv
import numpy as np
 
 
def create_image():
    img = np.zeros([400, 400, 3], np.uint8)#zeros:double类零矩阵  创建400*400 3个通道的矩阵图像 参数时classname为uint8
    img[:, :, 0] = np.ones([400, 400])*255#ones([400, 400])是创建一个400*400的全1矩阵,*255即是全255矩阵 并将这个矩阵的值赋给img的第一维
    img[:, :, 1] = np.ones([400, 400])*255#第二维全是255
    img[:, :, 2] = np.ones([400, 400])*255#第三维全是255
    cv.imshow("new image", img)#输出一张400*400的白色图片(255 255 255):蓝(B)、绿(G)、红(R)
 
create_image()
cv.waitKey(0)
cv.destroyAllWindows()

Le résultat de l'opération est de produire une image blanche. Vous pouvez également modifier 255 en d'autres nombres pour produire des images de couleurs différentes.
Vous pouvez également utiliser la fonction des uns séparément, le code est le suivant:


import cv2 as cv
import numpy as np
 
 
def create_image():
    img = np.ones([400, 400, 3], np.uint8)
    img[:, :, 0] = img[:, :, 0]*255
    img[:, :, 1] = img[:, :, 1]*255
    img[:, :, 2] = img[:, :, 2]*255
    cv.imshow("new image", img)
 
create_image()
cv.waitKey(0)
cv.destroyAllWindows()

Deux: Personnalisez une image monocanal

# -*- coding=GBK -*-
import cv2 as cv
import numpy as np
 
 
def create_image():
    img = np.ones([400, 400, 1], np.uint8)#该像素点只有一个通道,该函数使所有像素点的通道的灰度值为1
    img = img * 127 #使每个像素点单通道的灰度值变为127,0到255都可以,颜色由黑(0)转灰(127)转白(255)
    cv.imshow("new image", img)
 
create_image()
cv.waitKey(0)
cv.destroyAllWindows()

Remarque:

1. img = img * 127 dans le code signifie que chaque valeur du tableau est multipliée par 127

2. La raison pour laquelle le type de paramètre de la fonction np.ones est uint8 est que la plage du nombre uint8 est 0 ~ 255, alors il est exactement noir quand il est 0 et il est blanc quand il est 255. Si le type de paramètre de fonction est int8, la plage du nombre de type int8 est -128 ~ 127, puis -128 est noir, 127 est blanc

Pour l'utilisation de la méthode reshape ()

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici

Troisièmement, appelez la fonction de bibliothèque pour obtenir une inversion de pixel

# -*- coding=GBK -*-
import cv2 as cv
import numpy as np
 
 
#像素取反
def inverse(image):
    dst = cv.bitwise_not(image)
    cv.imshow("取反", dst)
 
 
src = cv.imread("C://1.jpg")
cv.namedWindow("原来", cv.WINDOW_NORMAL)
cv.imshow("原来", src)
t1 = cv.getTickCount()
inverse(src)
t2 = cv.getTickCount()
time = (t2 - t1)*1000/cv.getTickFrequency()
print("time: %s" % time)
cv.waitKey(0)
cv.destroyAllWindows()

L'appel de la fonction bitwise_not est très rapide!

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44145452/article/details/112411853
conseillé
Classement