我對python很陌生,目前正在研究一個類的邊緣檢測程序(具體地說,我正在檢測街道線)。cv2.imwrite在從np.array保存到JPG時改變顏色
我在圖像中讀取並檢測一些邊緣(通過hough)。然後將檢測到的邊緣放置在原始圖像上。在這個過程中,圖像數據被存儲爲numpy.ndarry。 最後,我想將圖像保存爲光盤(如JPG格式)。
如果我通過scipy.misc.imsave將圖像寫入光盤,一切工作正常。 如果我通過cv2.imwrite來完成,顏色會變成一種熱圖。
我已經閱讀了不同顏色通道和必要的縮放/轉換的幾個主題,但我找不到從numpy.ndarray到.jpg的解決方案。 我知道.jpg可能只有8bit或16bit的顏色通道,但不知道從哪裏開始。無論如何,我已經盲目地試圖用255( - >圖像幾乎是黑色)和255乘以( - >發白的熱圖:-))。
任何想法?這些是代碼中的相關部分:
讀取圖像(函數被後來被稱爲在一個循環中):
def read(img):
image = mpimg.imread(img)
return image
....
繪製函數在一個循環中繪製在一個數組中定義的所有行被稱爲
def draw_lines(img, line_coordinates, color=[255, 0, 0], thickness=4):
for line in line_coordinates:
for x1,y1,x2,y2 in line:
cv2.line(img, (x1, y1), (x2, y2), color, thickness)
這個函數調用繪製函數返回的所有生產線繪製的圖像
def depict_lines(img, array_of_coordinates):
line_img = np.zeros((img.shape[0], img.shape[1], 3), dtype=np.uint8)
draw_lines(line_img, array_of_coordinates)
return line_img
接下來,我結合原始圖像和含邊緣的一個:
def weighted_img(line_img, initial_img, α=0.95, β=1., λ=0.):
return cv2.addWeighted(initial_img, α, line_img, β, λ)
combined_images = weighted_img(depicted_lines, original_image)
最後,我將圖像保存到光盤上。這裏這個功能會產生奇怪的顏色:
cv2.imwrite(new_file_name, combined_images)
,而此功能工作正常:
scipy.misc.imsave('outfile.jpg', combined_images)
這是一個未經處理的圖像: natural colors
和處理後一個: distorted colors
您的幫助將不勝感激!
您還可以附加生成的輸出嗎?根據我的直覺,你試圖保存在磁盤上的圖像的'RGB'或'BGR'格式必定存在一些問題。 'cv2.imwrite()'希望輸入圖像爲'BGR'格式,但我不確定'scipy.misc.imsave'的輸入格式。 – ZdaR
@Marcel你可以上傳你正在使用的圖像嗎? –
嘿,我附上了一張前後圖片! –