怎么在PYTHON中使用OpenCV-python将RGB888转换为RGB565?

本教程将介绍如何在PYTHON中使用OpenCV-python将RGB888转换为RGB565?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么在PYTHON中使用OpenCV-python将RGB888转换为RGB565? 教程 第1张

问题描述

我想通过OpenCV-python读取摄像头图像,并将RGB565格式的图像原始数据(字节数组)发送到设备。
以下是一些测试代码:

import cv2
cam = cv2.VideoCapture(0) # open camera
flag, image = cam.read() # read image from camera
show = cv2.resize(image, (640, 480)) # resize to 640x480
show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB) # convert to RGB888

代码运行后,cvtColor在最后一行返回"show"ndarray(Numpy),"show"ndarray信息为:

>>> show.shape
(480, 640, 3)
>>> show.dtype
dtype('uint8')
>>> show.size
921600

我没有看到cv2.COLOR_BGR2RGB565的转换代码,有什么其他函数可以支持RGB888到RGB565?

或者有人知道怎么将ndarrayRGB888转换为RGB565?

推荐答案

我认为这是正确的,但没有任何RGB565可以测试它:

#!/usr/bin/env python3

import numpy as np

# Get some deterministic randomness and synthesize small image
np.random.seed(42)
im = np.random.randint(0,256,(1,4,3), dtype=np.uint8)

# In [67]: im
# Out[67]:
# array([[[102, 220, 225],
#  [ 95, 179,  61],
#  [234, 203,  92],
#  [  3,  98, 243]]], dtype=uint8)

# Make components of RGB565
R5 = (im[...,0]>>3).astype(np.uint16) << 11
G6 = (im[...,1]>>2).astype(np.uint16) << 5
B5 = (im[...,2]>>3).astype(np.uint16)

# Assemble components into RGB565 uint16 image
RGB565 = R5 | G6 | B5

# Produces this:
# array([[26364, 23943, 61003,798]], dtype=uint16)

或者,您可以删除cv2.cvtColor(show, cv2.COLOR_BGR2RGB)并将索引交换为:

R5 = (im[...,2]>>3).astype(np.uint16) << 11
G6 = (im[...,1]>>2).astype(np.uint16) << 5
B5 = (im[...,0]>>3).astype(np.uint16)

好了关于怎么在PYTHON中使用OpenCV-python将RGB888转换为RGB565?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。