imread()
用于从文件读取,而不是从存储器读取。
但你不必转换它。 PyGame
给出了您可以在cv2
中使用的图像。
你必须只:从RGB
- 转换(在
PyGame
使用)BGR
(在CV2
使用)。
transpose
图片 - 交换width
与height
。 PyGame
使用(X,Y)
但是CV2
使用(Y,X)
像数学中的矩阵(换句话说(row, column)
)。
我觉得这个代码显示了你可能需要的所有东西。
- 创建
PyGame
- 显示图像中
PyGame
- 转换图像的图像从
PyGame
到CV2
- 显示图像中
CV2
- 在
CV2
修改
CV2
- 显示修改后的图像的图像
- convert modif从
CV2
到PyGame
- 显示IED图像修改的图像中
PyGame
。
import pygame
import cv2
pygame.init()
# --- create PyGame image ---
pg_img = pygame.Surface((400, 200))
pygame.draw.circle(pg_img, (255,0,0), (0,0), 200)
# --- display PyGame image ---
screen = pygame.display.set_mode((400, 400))
screen.fill((255,255,255))
screen.blit(pg_img, pg_img.get_rect())
pygame.display.flip()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
running = False
pygame.quit()
# --- move from PyGame to CV2 ---
color_image = pygame.surfarray.array3d(pg_img)
color_image = cv2.transpose(color_image)
color_image = cv2.cvtColor(color_image, cv2.COLOR_RGB2BGR)
# --- display CV2 image ---
cv2.imshow('Color', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# --- change CV2 image ---
color_image = cv2.rotate(color_image, cv2.ROTATE_90_CLOCKWISE)
gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY)
# --- display CV2 image ---
cv2.imshow('Gray', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# --- save in file in CV2 ---
cv2.imwrite('test.png', color_image)
# --- move back from CV2 to PyGame ---
gray_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2RGB)
gray_image = cv2.transpose(gray_image)
pg_img = pygame.surfarray.make_surface(gray_image)
# --- display PyGame image ---
screen = pygame.display.set_mode((400, 400))
screen.fill((255,255,255))
screen.blit(pg_img, pg_img.get_rect())
pygame.display.flip()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
running = False
pygame.quit()