一、棋盘格
import cv2
import numpy as np
# 定义棋盘格的尺寸(单位、像素)
size = 30
# 定义标定板尺寸
#宽-尺寸*棋盘格个数
boardx = size * 12
#长
boardy = size * 9
canvas = np.zeros((boardy, boardx, 1), np.uint8) # 创建画布
for i in range(0, boardx):
for j in range(0, boardy):
if (int(i/size) + int(j/size)) % 2 != 0: # 判定是否为奇数格
canvas[j, i] = 255
cv2.imwrite("./chessboard.png", canvas)
绘制棋盘格示例如下:
二、纯色标版
# 2023.09.01
from PIL import Image
img = Image.new("RGB", (1920, 1080), (0, 0, 0)) # 1920*1080像素
img.save("black.png") #黑色:rgb(0,0,0)
#img.save("white.png") #白色:rgb(255,255,255)
#img.save("Red.png") #红色:rgb(255,0,0)
#img.save("Green.png") #绿色:rgb(0,255,0)
#img.save("Blue.png") #蓝色:rgb(0,0,255)
#青色:rgb(0,255,255)
#紫色:rgb(255,0,255)
纯蓝示例如下:
三、十字叉心标版
import cv2
imgs = cv2.imread('.\shizichaxin\white.png')#1920*1080
#cv2.line(imgs, (起始坐标), (结束坐标), color=(255, 0, 0), thickness=边框线条大小)
cv2.line(imgs, (960,0),
(960, 1080),
(0, 0, 0), 1, 1)
cv2.line(imgs, (0,540),
(1980, 540),
(0, 0, 0), 1, 1)
cv2.imshow('img', imgs)
cv2.imwrite(".\shizichaxin\white.png", imgs)
cv2.waitKey(0)
cv2.destroyAllWindows()
十字叉心标版示例如下:
四、灰度图标版
from PIL import Image
import os
# 设置图片尺寸
width = 640
height = 480
# 设置灰阶值列表
#gray_levels = list(range(256))#256张
gray_levels = [0,25,50,75,100,125,150,175,200,225,250]#特定灰度
# 创建保存图片的文件夹
save_dir = 'images'
if not os.path.exists(save_dir):
os.makedirs(save_dir)
# 遍历灰阶值列表,为每个灰阶值生成一张图片并保存到指定文件夹里
for level in gray_levels:
img = Image.new('L', (width, height))
for x in range(width):
for y in range(height):
pixels = img.load()
pixels[x, y] = level
img.save(os.path.join(save_dir, f'gray_level_{level}.bmp'))
五、gamma曲线拟合
import sys
import numpy as np
import re
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
#fit power function
x = [0,25,50,75,100,125,150,175,200,225,250]
#y = [0.036,1.12,4.84,10.71,19.288,28.845,42.421,57.191,75.955,92.662,108.26]
y = [0.09,1.84,7.31,15.169,26.336,37.802,53.672,70.167,89.719,106.19,122.71]
power_func = lambda x, a, b: a * np.power(x, b)
params, cov = curve_fit(power_func, x, y)
# plot circle
plt.plot(x, y, 'o', label='original data')
plt.plot(x, power_func(x, params[0], params[1]), label='fitted gamma')
plt.legend()
plt.savefig( "gamma_inmo_right.png", dpi=300)
print(np.round(params[1], 3))
gamma曲线拟合示例如下: