Python+OpenCV:色彩空间转换
####################################################################################################
# 色彩空间转换
def lmc_cv_convert_colorspaces():
"""
函数功能: 色彩空间转换.
"""
print(f"OpenCV支持的色彩空间: {[i for i in dir(lmc_cv) if i.startswith('COLOR_')]}")
# 读取图像
image = lmc_cv.imread('D:/Lena.jpg')
lmc_cv.namedWindow('Convert Colorspaces')
# create trackbars for color change
colorspaces_flags = [lmc_cv.COLOR_BGR2BGRA, lmc_cv.COLOR_BGR2RGBA, lmc_cv.COLOR_BGR2RGB, lmc_cv.COLOR_BGR2GRAY,
lmc_cv.COLOR_BGR2XYZ, lmc_cv.COLOR_BGR2YCrCb, lmc_cv.COLOR_BGR2Lab, lmc_cv.COLOR_BGR2Luv,
lmc_cv.COLOR_BGR2HLS, lmc_cv.COLOR_BGR2HSV_FULL, lmc_cv.COLOR_BGR2HLS_FULL,
lmc_cv.COLOR_BGR2YUV, lmc_cv.COLOR_BGR2YUV_I420, lmc_cv.COLOR_BGR2YUV_IYUV,
lmc_cv.COLOR_BGR2YUV_YV12]
colorspaces_texts = ['COLOR_BGR2BGRA', 'COLOR_BGR2RGBA', 'COLOR_BGR2RGB', 'COLOR_BGR2GRAY',
'COLOR_BGR2XYZ', 'COLOR_BGR2YCrCb', 'COLOR_BGR2Lab', 'COLOR_BGR2Luv',
'COLOR_BGR2HLS', 'COLOR_BGR2HSV_FULL', 'COLOR_BGR2HLS_FULL',
'COLOR_BGR2YUV', 'COLOR_BGR2YUV_I420', 'COLOR_BGR2YUV_IYUV',
'COLOR_BGR2YUV_YV12']
lmc_cv.createTrackbar('Index', 'Convert Colorspaces', 0, len(colorspaces_flags) - 1, callback_trackbar)
lmc_cv.setTrackbarMin('Index', 'Convert Colorspaces', 0)
lmc_cv.setTrackbarMax('Index', 'Convert Colorspaces', len(colorspaces_flags) - 1)
lmc_cv.setTrackbarPos('Index', 'Convert Colorspaces', round(len(colorspaces_flags) / 2))
while True:
trackbar_pos = lmc_cv.getTrackbarPos('Index', 'Convert Colorspaces')
convert_image = lmc_cv.cvtColor(image, colorspaces_flags[trackbar_pos])
lmc_cv.putText(convert_image, colorspaces_texts[trackbar_pos], (10, 30), lmc_cv.FONT_HERSHEY_SIMPLEX, 1,
(255, 255, 255), 2, lmc_cv.LINE_AA)
lmc_cv.imshow('Convert Colorspaces', convert_image)
# 等待用户退出.
# waitKey() 与 0xFF(1111 1111)相与是因为waitKey(1)返回值不止8位,但只有后8位实际有效,为避免产干扰,通过"与"操作将其余位置0。
if ord('q') == (lmc_cv.waitKey(10) & 0xFF):
break
# 销毁窗口
lmc_cv.destroyAllWindows()