1.カラーチャンネルを変更した後、画像を読み取って出力します
行数、列数、チャンネル数の行列で画像を取得できます。行列を操作することで画像のピクセル数を変更できます。
コードは次のとおりです。
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() #释放所有的内存
実行中のスクリーンショット:
cv :: getTickCount()を使用して、コードの実行時間を測定できます。この関数は、最後の起動からのクロックサイクル数を返します。
必要なのは特定のコードセグメントが実行されるミリ秒数であるため、別の関数cv :: getTickFrequency()も必要です。この関数は、1秒あたりのクロックサイクル数を返します。
2.マルチチャンネル画像をカスタマイズします
使用される関数:0と1の
コードは次のとおりです。
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()
操作の結果、白い画像が出力されます。255を他の数値に変更して、異なる色の画像を出力
することもできます。ones関数を個別に使用することもできます。コードは次のとおりです。
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()
2:シングルチャンネル画像をカスタマイズする
# -*- 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()
注意:
1.コードのimg = img * 127は、配列の各値に127を掛けることを意味します
2. np.ones関数のパラメータタイプがuint8である理由は、uint8番号の範囲が0〜255であるため、0の場合は真っ黒、255の場合は白になります。関数パラメータタイプがint8の場合、int8タイプ番号の範囲は-128〜127であり、-128は黒、127は白です。
reshape()メソッドを使用する場合
3つ目は、ライブラリ関数を呼び出してピクセル反転を実現することです。
# -*- 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()
bitwise_not関数の呼び出しは非常に高速に実行されます!