readYUV422.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/python3
  2. import serial
  3. import math
  4. import time
  5. import logging
  6. def readImage(port_dev,width=320,height=240,regId=0xD0,regVal=0xD0,colour=0):
  7. regCol = 0x01 if colour else 0x00
  8. ser = serial.Serial(port_dev, 8000000)
  9. ser.flushInput()
  10. ser.write(bytearray([regId,regVal,regCol]))
  11. if regId == 0xD0 and regVal == 0xD0:
  12. bitmap = list()
  13. dataY = ser.read(size=width*height)
  14. if colour:
  15. dataCbCr = ser.read(size=width*height)
  16. index = 0
  17. dataCb = list()
  18. dataCr = list()
  19. Alt = True
  20. for chroma in dataCbCr:
  21. if Alt:
  22. dataCr.extend([chroma,chroma])
  23. Alt = False
  24. else:
  25. dataCb.extend([chroma,chroma])
  26. Alt = True
  27. for y in range(height):
  28. for x in range(width):
  29. Y = dataY[index]
  30. Cb = dataCb[index]
  31. Cr = dataCr[index]
  32. R = int(max(0, min(255,Y + 1.40200 * (Cr - 0x80))))
  33. G = int(max(0, min(255,Y - 0.34414 * (Cb - 0x80) - 0.71414 * (Cr - 0x80))))
  34. B = int(max(0, min(255,Y + 1.77200 * (Cb - 0x80))))
  35. bitmap.append((R,G,B))
  36. index += 1
  37. else:
  38. index = 0
  39. for y in range(height):
  40. for x in range(width):
  41. R = G = B = int(dataY[index])
  42. bitmap.append((R,G,B))
  43. index +=1
  44. ser.close()
  45. print(index)
  46. return bitmap
  47. elif regId != 0xD0 and regVal == 0xD0:
  48. value = ser.read(1)
  49. return hex(ord(value))