ฉันพยายามที่จะใช้matplotlib
ในการอ่านในภาพ RGB และแปลงเป็นสีเทา
ใน matlab ฉันใช้สิ่งนี้:
img = rgb2gray(imread('image.png'));
ในแบบฝึกหัด matplotlibพวกเขาไม่ได้ครอบคลุม พวกเขาอ่านในภาพ
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
แล้วพวกเขาก็แบ่งอาร์เรย์ แต่นั่นไม่ใช่สิ่งเดียวกันกับการแปลง RGB เป็นสีเทาจากสิ่งที่ฉันเข้าใจ
lum_img = img[:,:,0]
ฉันคิดว่ามันยากที่จะเชื่อว่า numpy หรือ matplotlib ไม่มีฟังก์ชั่นการแปลงจาก rgb เป็นสีเทา นี่ไม่ใช่การดำเนินการทั่วไปในการประมวลผลรูปภาพใช่หรือไม่
ฉันเขียนฟังก์ชั่นที่ง่ายมากที่ทำงานกับภาพที่นำเข้ามาใช้imread
ใน 5 นาที มันไม่มีประสิทธิภาพอย่างน่ากลัว แต่นั่นเป็นเหตุผลว่าทำไมฉันจึงหวังว่าจะมีการติดตั้งแบบมืออาชีพในตัว
เซบาสเตียนได้ปรับปรุงการทำงานของฉัน แต่ฉันยังคงหวังว่าจะหาตัวในตัว
การใช้งานของ MATLAB (NTSC / PAL):
import numpy as np
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
gray = np.mean(rgb, -1)
ทำงานได้ดี ขอบคุณ มีเหตุผลที่จะไม่ใช้สิ่งนี้หรือไม่? เหตุใดฉันจึงต้องใช้วิธีแก้ปัญหาในคำตอบด้านล่างแทน
np.mean(rgb, -1)
มันค่อนข้างแตกต่างกว่า
0.2989 * R + 0.5870 * G + 0.1140 * B
ฉันสมมติว่ามันเป็นวิธีมาตรฐานในการทำมัน
gray = np.mean(rgb, -1)
ของคุณก็เป็น: อาจจะrgb[...,:3]
มีถ้าเป็นจริง rgba