于方軍 于倩倩
隨著技術(shù)的進(jìn)化,人們發(fā)現(xiàn)通過RGB三原色混合可以得到各種顏色。而彩色顯示器就是利用這一點顯示彩色圖片的。對于計算機(jī)來說,構(gòu)成彩色圖像的像素點顏色信息是由R(紅色)、G(綠色)、B(藍(lán)色)三基色的值構(gòu)成,不同的RGB值可以混合出各種顏色,我們可以用一個四腳共陰極的三色LED燈,通過控制這三個值,模擬顯示不同顏色。對于圖像處理的操作,如模糊處理、色度處理、對比度調(diào)節(jié)等就是對這組數(shù)據(jù)進(jìn)行復(fù)雜的數(shù)學(xué)運算。本文利用開源庫OpenCV,通過卷積運算來實現(xiàn)圖像處理,讓學(xué)生看到圖像處理操作背后的數(shù)值計算才是圖像處理的本質(zhì)。
現(xiàn)代的顯示屏對色彩的還原度已經(jīng)達(dá)到了以假亂真的程度,而顯示器從單色到彩色的過程并不是一個簡單的過程。本實驗過程首先讀取某點的像素值,即獲取該點的RGB值,并通過開源硬件Arduino控制四腳共陰極的三色LED燈,并用像素點的RGB值控制對應(yīng)的LED引腳,在另一種類型的計算機(jī)上復(fù)現(xiàn)該顏色,已實現(xiàn)對RGB顯示色彩這一概念的深刻理解。
讀取圖片的像素值
如上頁圖1所示為用Jupyter Notebook打開源程序,分步執(zhí)行后,讀取一張標(biāo)準(zhǔn)的RGB混色示意圖片并顯示,接下來用img.shape顯示彩色圖片的長、寬、通道數(shù),用img顯示組成圖片的各個點的像素值。
圖1所示的圖像,是一個80行、80列的像素點的組合,每個像素點由三個顏色信息構(gòu)成。對于彩色圖像來說,每一個像素點的值由RGB三個通道值構(gòu)成,每個通道值用0~255中間值代表不同強(qiáng)度,這些不同強(qiáng)度的RGB值可以組合出各種顏色,通過研究控制圖片的像素值來控制顯示顏色,可以幫助學(xué)生深入理解計算機(jī)中彩色圖片的構(gòu)成和顯示原理。
2.改變像素值觀察區(qū)域圖像顏色變化
用px=img[20,40]讀取圖片中縱坐標(biāo)都為20、橫坐標(biāo)為40的像素點的像素值,該點為藍(lán)色所以讀取值為[0 0 254]??梢酝ㄟ^改變該點的像素值,觀察顏色的變化,如改為[255 0 0],則該點變?yōu)榧t色;也可以通過img[30:40,20:30]=[0,0,255]改變某個區(qū)域的像素值為藍(lán)色,用同樣的方法,可以在圖中添加綠色塊和紅色塊(如圖2)。
接下來,可以改變顏色塊的像素值為其他值,看看色塊顏色應(yīng)該怎樣變化,如果把三個值都設(shè)置為255,得到的是白色,都設(shè)置為0得到的就是黑色;如果設(shè)置為相同的三個中間值如[100 100 100],就會得到一個灰度塊,同時改變這個值可以得到亮度不同的灰度塊。了解了圖像矩陣色彩信息的原理之后,便可以在Arduino平臺上復(fù)現(xiàn)圖片上任意一點的色彩信息。
3.對像素點顏色的模擬顯示
Pinpong庫是一套控制開源硬件主控板的Python庫,通過在Python程序中加載PinPong庫即可連接硬件,通過Arduino板D8、D7、D6控制紅綠藍(lán)三色全彩LED燈三個對應(yīng)引腳,把讀取的某點像素值通過pw0.write_analog()賦值給這些引腳,實現(xiàn)模擬顯示該點顏色的功能。
(1)讀取像素點的值
用px=img[40,30]獲得縱坐標(biāo)40,橫坐標(biāo)30的像素點色值為[255 4 253],該點呈現(xiàn)粉色。這三個值對應(yīng)列表px中的px[0]、px[1]、px[2],接下來要用這三個值控制共陰極的RGB三色LED的三個對應(yīng)腳。幸運的是,色彩的RGB顯示范圍和Arduino中的模擬引腳的輸入范圍相當(dāng),這省去了換算的麻煩,可以直接使用px當(dāng)中的分量數(shù)值(如下頁圖3、圖4)。
(2)模擬顯示讀取像素點顏色
把讀取計算機(jī)圖片上某個點的色彩數(shù)值用pinpong庫中的pw0.write_analog(pw[0])加載到Arduino的對應(yīng)腳上,以顯示計算機(jī)色彩在單片機(jī)上的還原,運行程序得到的實驗裝置上顯示粉色的效果如圖5所示。
這樣,用Arduino復(fù)現(xiàn)彩色圖片中像素點的色彩信息,就完成了彩色顯示器中從0到1的突破。顯示器可以看作許多極小的彩色LED點的組合,通過這種簡單的代碼級別的對像素點的操作,點動成線,線動成面,利用這樣的原理,是否會有更加豐富的顯示效果,留給大家者進(jìn)一步思考。而技術(shù)突破背后的數(shù)學(xué)知識、計算思維和實踐智慧,則是信息科技學(xué)科的育人價值所在。