本發(fā)明屬于數(shù)碼拍照處理技術(shù)領(lǐng)域,尤其涉及一種添加智能軟件光源的數(shù)碼拍照處理方法。
背景技術(shù):
目前,通過(guò)電腦進(jìn)行人像數(shù)碼拍照技術(shù)已經(jīng)成熟,并且應(yīng)用非常廣泛。專業(yè)拍照一般在攝影棚中進(jìn)行,攝影棚安裝有專業(yè)的光源,一般需要主燈、輔燈、地?zé)?、頂燈?臺(tái),背景燈1到2臺(tái)。這種布光方式使影像光線柔和,曝光均勻,能夠去掉眼袋、消除鼻溝陰影,使人像更加唯美。在具體拍照操作時(shí),特別是對(duì)一些高校、中小學(xué)、機(jī)關(guān)、企事業(yè)單位在大批量采集照片時(shí),往往因?yàn)闆](méi)有專業(yè)的攝影棚,并且時(shí)間倉(cāng)促,一般就地選擇辦公室、會(huì)議室作為拍照地點(diǎn),依賴房間頂部的日光燈或靠窗口、過(guò)道的散射光作為光源,由于光源不均衡,拍照時(shí),常常出現(xiàn)人像局部曝光過(guò)量、不足或失衡,在一定程度上影響了最終照片效果。
綜上所述,目前大批量采集照片時(shí)存在光源不均衡,出現(xiàn)人像局部曝光過(guò)量、不足或失衡,影響最終照片效果。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種添加智能軟件光源的數(shù)碼拍照處理方法,旨在解決目前大批量采集照片時(shí)存在光源不均衡,出現(xiàn)人像局部曝光過(guò)量、不足或失衡,影響最終照片效果的問(wèn)題。
本發(fā)明是這樣實(shí)現(xiàn)的:在窗口中實(shí)時(shí)捕獲并顯示攝像頭視頻圖像,選擇光源庫(kù),拖動(dòng)指定光源到視頻指定位置,系統(tǒng)將以默認(rèn)光源參數(shù)在該位置對(duì)視頻進(jìn)行渲染,用戶可通過(guò)鼠標(biāo)或菜單對(duì)光源參數(shù)進(jìn)行修改,系統(tǒng)根據(jù)用戶修改后的光源參數(shù)對(duì)視頻圖像實(shí)時(shí)進(jìn)行渲染。
進(jìn)一步,所述添加智能軟件光源主要包括以下步驟:
步驟一,建立光源庫(kù):即動(dòng)態(tài)光源數(shù)組,每一數(shù)組元素代表一個(gè)光源,每一光源具有位置p、方向f、亮度b、射程r、顏色c等屬性;
步驟二,實(shí)時(shí)獲取視頻流幀圖像;
步驟三,光源管理;
1、添加光源:在光源庫(kù)中選擇一個(gè)光源,將其拖動(dòng)到可視窗口指定位置,即完成了軟件光源的添加(此時(shí),在可視窗口顯示光源特征圖像縮略圖);
2、移動(dòng)光源:在光源圖像區(qū)域建立的位置熱區(qū),在該區(qū)域內(nèi)拖動(dòng)鼠標(biāo)即可直觀完成對(duì)光源位置的移動(dòng);
3、設(shè)置光源參數(shù):
方法一:通過(guò)右鍵菜單:設(shè)置位置p、方向f、亮度b、射程r、顏色c等參數(shù)精確數(shù)值;
方法二:通過(guò)鼠標(biāo)操作:在光源圖像區(qū)域建立參數(shù)熱區(qū):包括方向f熱區(qū)、亮度b熱區(qū)、射程r熱區(qū),通過(guò)鼠標(biāo)在熱區(qū)內(nèi)拖動(dòng)相關(guān)操作桿即可直觀完成參數(shù)設(shè)置;
4、刪除光源:根據(jù)視頻圖像亮度平衡需要,可刪除多余光源,刪除水源即刪除動(dòng)態(tài)光源數(shù)組中指定元素即可;
步驟四,遍歷光源列表,根據(jù)光源參數(shù)對(duì)幀圖像進(jìn)行亮度渲染:獲取圖像區(qū)域顏色原始值,提取(r,g,b)分量;根據(jù)光源位置p、亮度b、射程r、方向f、光線顏色c等參數(shù)計(jì)算渲染后應(yīng)疊加的顏色值并提取其顏色分量(r,g,b),將原始顏色值的(r,g,b)分量同步疊加光源渲染顏色值的(r,g,b),即可在可視區(qū)域?qū)崟r(shí)顯示最終渲染效果圖樣;
步驟五,拍照保存時(shí),實(shí)時(shí)獲取視頻流幀圖像,進(jìn)行亮度渲染并進(jìn)行保存。
進(jìn)一步,所述視頻流幀圖像的加密方法包括以下步驟:
步驟一、定義隨機(jī)函數(shù)funa,根據(jù)視頻文件的長(zhǎng)度,產(chǎn)生若干對(duì)隨機(jī)整數(shù)(x,y),存入集合s{}中,并將集合s保存到數(shù)據(jù)庫(kù)中對(duì)應(yīng)的視頻文件屬性字段中,控制生成視頻加密文件大小的y值<10;
步驟二、按字節(jié)讀取視頻文件流,從數(shù)據(jù)庫(kù)中依據(jù)視頻文件的信息,讀取存入的集合s{},獲取所有隨機(jī)數(shù)對(duì);
步驟三、根據(jù)數(shù)據(jù)對(duì)(x,y),在文件流中的x位置寫入y長(zhǎng)度的隨機(jī)字符串,將文件流寫入加密視頻文件流中;
步驟四、重復(fù)步驟三,直到文件讀寫完成。
本發(fā)明提供的添加智能軟件光源的數(shù)碼拍照處理方法,可對(duì)視頻任意區(qū)域添加一個(gè)或多個(gè)軟件光源(數(shù)量在理論上沒(méi)有限制),并可分別設(shè)置燈光方向f、燈光亮度b、燈光射程r、光線顏色c等,能夠根據(jù)畫面需要智能、準(zhǔn)確渲染指定區(qū)域亮度,達(dá)到提高數(shù)碼拍照成像質(zhì)量目的;在外部物理光源不能滿足數(shù)碼拍照條件時(shí),可以通過(guò)軟件實(shí)現(xiàn)添加多種類型光源,調(diào)整燈光方向、射程和亮度等參數(shù),實(shí)現(xiàn)對(duì)視頻圖像指定區(qū)域進(jìn)行智能渲染,從而提高照片成像質(zhì)量。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例提供的添加智能軟件光源的數(shù)碼拍照處理方法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
下面結(jié)合附圖對(duì)本發(fā)明的應(yīng)用原理作詳細(xì)的描述。
如圖1所示,本發(fā)明實(shí)施例提供的添加智能軟件光源的數(shù)碼拍照處理方法包括以下步驟:
s101:建立光源庫(kù);
s102:實(shí)時(shí)獲取視頻流幀圖像;
s103:軟件光源管理;添加軟件光源,在可視區(qū)域加載軟件光源特征圖像縮略圖;移動(dòng)光源;設(shè)置光源參數(shù):位置p、方向f、亮度b、射程r、顏色c參數(shù);刪除光源;
s104:遍歷光源列表,根據(jù)光源參數(shù)對(duì)幀圖像進(jìn)行亮度渲染;
s105:拍照保存時(shí),實(shí)時(shí)獲取視頻流幀圖像,進(jìn)行亮度渲染并進(jìn)行保存。
在步驟s103中:光源參數(shù)設(shè)置:(1)通過(guò)鼠標(biāo)拖動(dòng)相關(guān)熱區(qū)操作桿完成;(2)通過(guò)右鍵菜單進(jìn)行設(shè)置。
所述視頻流幀圖像的加密方法包括以下步驟:
步驟一、定義隨機(jī)函數(shù)funa,根據(jù)視頻文件的長(zhǎng)度,產(chǎn)生若干對(duì)隨機(jī)整數(shù)(x,y),存入集合s{}中,并將集合s保存到數(shù)據(jù)庫(kù)中對(duì)應(yīng)的視頻文件屬性字段中,控制生成視頻加密文件大小的y值<10;
步驟二、按字節(jié)讀取視頻文件流,從數(shù)據(jù)庫(kù)中依據(jù)視頻文件的信息,讀取存入的集合s{},獲取所有隨機(jī)數(shù)對(duì);
步驟三、根據(jù)數(shù)據(jù)對(duì)(x,y),在文件流中的x位置寫入y長(zhǎng)度的隨機(jī)字符串,將文件流寫入加密視頻文件流中;
步驟四、重復(fù)步驟三,直到文件讀寫完成。
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的應(yīng)用原理作進(jìn)一步的描述。
本發(fā)明實(shí)施例提供的添加智能軟件光源的數(shù)碼拍照處理方法包括以下步驟:
1、建立光源庫(kù)
publicstaticarraylistlamps;//動(dòng)態(tài)光源結(jié)構(gòu)數(shù)組:已經(jīng)加載的光源
其中:光源序號(hào)為編號(hào)流水如1,2,3……;光源名稱為對(duì)光源的標(biāo)記,對(duì)多個(gè)光源便于識(shí)別;光源圖像為特征圖片,比如燈泡、太陽(yáng)……;光源中心位置為中心點(diǎn)坐標(biāo);光源原始尺寸為光源圖片的實(shí)際大小;光源顯示縮放比例即在窗口中縮放顯示,便于對(duì)光源的操作;亮度、射程、起始角度、終止角度和顏色分別為光源的不同特征參數(shù)。
光源庫(kù)即為預(yù)定義一批常用光源列表,如太陽(yáng)、日光燈…..
2、實(shí)時(shí)獲取視頻流幀圖像。
bitmapvideoframebitmap=(bitmap)videosourceplayer.getcurrentvideoframe();
3、光源管理。
(1)添加光源:addlamp(bitmaplampbitmap,lampstyles,pointp,floatf1,floatf2,floatb,intr,colorc),即在激活的動(dòng)態(tài)光源數(shù)組中增加一個(gè)元素,同時(shí)在窗口中顯示出來(lái)。
(2)移動(dòng)光源:movelamp(intlampnumber,pointp);即改變指定光源的坐標(biāo)。
(3)設(shè)置光源參數(shù):editlamp(intlampnumber),即設(shè)置指定光源的位置p、亮度b、射程r、方向角f1、f2、光線顏色c等參數(shù)。
其中位置p的范圍是視頻可視區(qū)域內(nèi);亮度b范圍是0至255;射程b范圍是可視區(qū)域最大范圍max(videoframew,videoframeh);方向角f1(起始角)、方向f2(終止角):范圍是f1>=0&&f1<=360,f2>=0&&f2<=360。
(4)刪除光源:deletelamp(intlampnumber)。即在激活的動(dòng)態(tài)光源數(shù)組中刪除一個(gè)元素,同時(shí)在窗口中不再顯示該光源。
4、遍歷光源列表,根據(jù)光源參數(shù)對(duì)幀圖像進(jìn)行亮度渲染:獲取圖像區(qū)域顏色原始值,提取(r,g,b)分量;根據(jù)光源位置p、亮度b、射程r、方向f、光線顏色c等參數(shù)計(jì)算渲染后應(yīng)疊加的顏色值并提取其顏色分量(r,g,b),將原始顏色值的(r,g,b)分量同步疊加光源渲染顏色值的(r,g,b),即可在可視區(qū)域?qū)崟r(shí)顯示最終渲染效果圖樣。
(1):獲取圖像區(qū)域原始顏色值color_old(x,y),提取(r,g,b)分量。
(2):根據(jù)燈光參數(shù)位置p、亮度b、射程r、方向f、顏色c等參數(shù)計(jì)算光線顏色colorbrightness(x,y),并提取其(r,g,b)分量。
(3)疊加光線亮度:在原始顏色值的基礎(chǔ)上疊加光線顏色值,即在r、g、b分量上同步疊加,在可視區(qū)域?qū)崟r(shí)顯示最終效果
r+=(int)brightnessr;
g+=(int)brightnessg;
b+=(int)brightnessb;
5、保存時(shí),實(shí)時(shí)獲取視頻流幀圖像,重復(fù)上述步驟進(jìn)行亮度渲染并對(duì)指定的照片區(qū)域進(jìn)行裁剪、保存。
bitmapsavephoto=cropbitmap(videoframebitmap,savephotorectangle);
savephoto.save(savephotofilename,savephotofileformat.jpg)。
以上技術(shù)處理說(shuō)明:
1、在光源庫(kù)區(qū)域內(nèi)建立點(diǎn)擊選擇光源熱區(qū)(△、▽)、滾動(dòng)選擇光源熱區(qū)和拖動(dòng)添加光源熱區(qū)。熱區(qū)為一系列坐標(biāo)數(shù)組,用于感應(yīng)鼠標(biāo)的位置和事件。
point[]p_lampmode_downarea;//上部△選擇光源熱區(qū):用于選擇上一個(gè)光源
point[]p_lampmode_uparea;//下部▽選擇光源熱區(qū):用于選擇下一個(gè)光源
point[]p_lampmode_rollarea;//滾動(dòng)選擇光源熱區(qū)
point[]p_lampmode_area;//拖動(dòng)添加光源熱區(qū)
2、在光源特征圖像區(qū)域內(nèi)建立光源參數(shù)設(shè)置熱區(qū)和移動(dòng)熱區(qū),進(jìn)入光源特征圖像縮略區(qū)域,系統(tǒng)自動(dòng)放大顯示光源特征圖像,并響應(yīng)鼠標(biāo)點(diǎn)擊、滾動(dòng)、拖動(dòng)操作,觸發(fā)光源位置移動(dòng)、參數(shù)設(shè)置事件,并根據(jù)鼠標(biāo)對(duì)光源參數(shù)操縱桿的位移量實(shí)時(shí)渲染可視區(qū)域。
本發(fā)明提供的智能軟件的實(shí)現(xiàn)原理:光源的亮度由光源中心沿?zé)艄夥较虺示€性衰減,即以光源中心顏色為基準(zhǔn),提取(r、g、b)分量,通過(guò)同步線性改變其r、g、b分量的數(shù)值,即可實(shí)現(xiàn)光源亮度的衰減。在實(shí)時(shí)渲染視頻亮度時(shí)放棄傳統(tǒng)的像素法(通過(guò)開(kāi)發(fā)環(huán)境提供的專門獲取顏色的函數(shù)來(lái)獲取指定位置像素的顏色),而是采用內(nèi)存法,即通過(guò)獲取圖像內(nèi)存變量的掃描寬度、像素寬度,對(duì)指定位置像素的顏色進(jìn)行內(nèi)存尋址,通過(guò)直接對(duì)內(nèi)存的操作達(dá)到修改顏色亮度的目,部分關(guān)鍵代碼如下:
intstride=math.abs(bmpdata.stride);//掃描寬度;
intpixelwidth=stride/bmpdata.width;//一個(gè)像素所占的位數(shù)4位:(r,g,b,y),3位:(r,g,b)。
byte[]rgbvalues=newbyte[bytes];//位圖數(shù)據(jù)字節(jié)數(shù)組;
//原始顏色值
intr=rgbvalues[y*stride+x*pixelwidth+2];//r為紅色分量;
intg=rgbvalues[y*stride+x*pixelwidth+1];//g為綠色分量;
intb=rgbvalues[y*stride+x*pixelwidth+0];//b為藍(lán)色分量。
//光源r,g,b疊加
//內(nèi)存數(shù)據(jù)直接寫入
rgbvalues[y*stride+x*pixelwidth+0]=(byte)(b);
rgbvalues[y*stride+x*pixelwidth+1]=(byte)(g);
rgbvalues[y*stride+x*pixelwidth+2]=(byte)(r);
marshal.copy(rgbvalues,0,ptr,bytes);
通過(guò)內(nèi)存法進(jìn)行渲染,處理、存儲(chǔ)速度極快,在實(shí)際應(yīng)用中幾乎感覺(jué)不到時(shí)間延遲。
在對(duì)視頻進(jìn)行渲染過(guò)程中,涉及到較大的圖像內(nèi)存變量,盡管開(kāi)發(fā)語(yǔ)言提供自動(dòng)內(nèi)存管理,但是為提高內(nèi)存利用效率和防止內(nèi)存溢出,系統(tǒng)專門增加了內(nèi)存變量管理進(jìn)程,對(duì)廢棄的變量及時(shí)進(jìn)行清除,進(jìn)一步提高了視頻渲染的速度和穩(wěn)定性。在長(zhǎng)時(shí)間(連續(xù)3天不間斷)、畫質(zhì)(1080p)、高速率(次/50ms)情況下對(duì)視頻源、光源、頭像區(qū)進(jìn)行隨機(jī)移動(dòng)、360度范圍內(nèi)任意角度旋轉(zhuǎn)等超強(qiáng)度壓力測(cè)試,系統(tǒng)均能正常運(yùn)行。軟件在無(wú)專業(yè)攝影棚,特別是針對(duì)學(xué)校、機(jī)關(guān)、企事業(yè)等單位進(jìn)行批量拍照時(shí)具有很強(qiáng)的實(shí)用性。相對(duì)軟件光源,物理光源在成像效果上更具層次感和真實(shí)性,如條件許可,還是盡量搭建專門的物理光源。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。