我正在用python制作一個應用程式,允許人們分享他們的螢屏,但為了獲得一個體面的幀率,我想將影像壓縮成灰度格式,然后在客戶端將其轉回為RGB影像。但當我試圖這樣做時,它仍然顯示為灰階影像。
然后我嘗試使用HSV顏色轉換,它確實顯示了顏色,但由于某種原因,它有一個紅色過濾器。
我不會顯示所有的代碼,因為它至少有2000行,但我將顯示我遇到問題的代碼的哪一部分。
服務器端:
sct_img = sct.grab(bounding_box)
img_np = np.array(sct_img)
框架 = img_np
frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)
frame = cv2.resize(frame, (0,0), fx =0.70, fy =0.70)
data = pickle.dumps(frame)
message_size = struct.pack("L", len(data))
clientocket.sendall(message_size data)
客戶端:
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
frame = cv2.resize(frame, (x, y))
cv2.imshow('frame', frame)
uj5u.com熱心網友回復:
當你把彩色影像還原成灰度時,你就拋棄了資訊。沒有辦法把顏色找回來。如果你想獲得一個可接受的幀率,你將不得不選擇一些其他的方法。
uj5u.com熱心網友回復:
當你將RGB影像轉換為灰度時,顏色資料會被丟棄,因此你將無法取回原始影像。觀察以下代碼的輸出:
import cv2
import numpy as np
# 創建影像
img = np.full((500, 500, 3), 255, 'uint8')
cv2. rectangle(img, (50, 100), (250, 300), (0, 0, 96), -1)
cv2. circle(img, (300, 350), 100, (0, 50, 0), -1)
cv2.drawContours(img, [np. array([(300, 50), (200, 250), (400, 250) ]], 0, (255, 0, 0), -1)
# 轉換為灰階 # 轉換為灰階。
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(np.unique(img_gray))
# 顯示影像 # 顯示影像
cv2.imshow("BGR"/span>, img)
cv2.imshow("灰色", img_gray)
cv2.waitKey(0)
輸出:
正如你所看到的,對于紅、綠、藍三種形狀的影像(每種顏色都有特定的色調),將其轉換為灰度的結果是三種顏色變成了一種;(29,29,29)。計算機不可能看出這三種形狀曾經是不同的顏色。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311839.html
標籤:


