0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教程:在ArkUI開發(fā)框架中實(shí)現(xiàn)馬賽克處理功能

海闊天空的專欄 ? 來源: HarmonyOS開發(fā)者 ? 作者: HarmonyOS開發(fā)者 ? 2022-05-27 09:48 ? 次閱讀



關(guān)于馬賽克

馬賽克是一種使用較為廣泛的圖片處理方式,通過將圖片特定區(qū)域的色階細(xì)節(jié)劣化、色塊打亂讓圖片模糊化,常用來遮擋圖片中的重要信息及隱私內(nèi)容。本期,我們將通過圖像的基礎(chǔ)知識(shí)幫助大家了解圖片馬賽克處理的原理,同時(shí)給大家?guī)鞟rkUI開發(fā)框架中圖片馬賽克處理的實(shí)現(xiàn)。



一、圖像基礎(chǔ)

了解圖片的像素以及分辨率等基礎(chǔ)知識(shí),有助于后文對馬賽克原理的理解。

1. 像素

像素(英文名:pixel,簡稱px)是圖片的最小單位,每張圖片都是由無數(shù)的像素點(diǎn)組成。如圖1所示,每個(gè)小方格就是一個(gè)個(gè)的像素點(diǎn),每個(gè)像素點(diǎn)都具有明確的位置坐標(biāo)和色彩數(shù)值,像素點(diǎn)的位置和顏色共同決定該圖片所呈現(xiàn)出來的樣子。

圖片

圖1 像素點(diǎn)

在計(jì)算機(jī)中,每個(gè)像素點(diǎn)的色彩數(shù)值都是通過RGB通道來控制,RGB即三原色:紅Red,綠Green,藍(lán)Blue的通道,這三種色彩混合疊加,幾乎能形成人類視力所能感知的所有顏色。由此,設(shè)置圖片中每個(gè)像素的RGB通道分量值,并根據(jù)特有的算法或者濾波器,便可讓像素呈現(xiàn)任何顏色。

2. 分辨率

分辨率是圖片在長和寬上各擁有的像素,分辨率越高,所包含的像素就越多,圖片就越清晰,由于分辨率比較低,我們甚至無法辨別圖片的內(nèi)容。



二、馬賽克原理

增大圖片的分辨率可以讓圖片變得更清晰,那么我們是不是可以降低圖片的分辨率來讓圖片變模糊?

馬賽克的原理就是降低原圖片的分辨率。如圖5所示,首先我們將原圖分割成若干個(gè)大小一致的小方格,然后獲取每個(gè)小方格中的像素點(diǎn)的平均色彩數(shù)值,最后使用獲取到的平均色彩數(shù)值替換該方格中所有的像素點(diǎn),即可實(shí)現(xiàn)圖片的馬賽克處理,同時(shí),我們還可以控制圖片中小方格的個(gè)數(shù)來實(shí)現(xiàn)馬賽克的強(qiáng)弱。



三、馬賽克實(shí)現(xiàn)

相信大家已經(jīng)熟悉了馬賽克的原理,下面我們將以全馬賽克圖片為例,為大家介紹基于ArkUI開發(fā)框架的馬賽克的具體實(shí)現(xiàn)。

1. 首先我們需獲取ArkUI開發(fā)框架的image能力,該能力提供了圖片開發(fā)的基本接口。


import image from "@ohos.multimedia.image"

2. 通過readPixelsToBuffer接口,一次性讀取圖片中所有的像素點(diǎn)數(shù)據(jù),每個(gè)像素點(diǎn)數(shù)據(jù)都包含了RGB通道的分量值(如Red:18、Green:250、Blue:20)。

poYBAGKQLNeAYQpAAAAa_RUY-ro266.png

其中ArrayBuffer里面緩存的像素點(diǎn)數(shù)據(jù)主要包括RGB通道的分量值及圖片透明度,參考代碼如下:

poYBAGKQLO-ADbmRAAAxQGb4az8813.png

3. 根據(jù)自定義的單個(gè)小方格的Width和Height,將整個(gè)圖片分成若干小方格。

poYBAGKQLQeAW_NDAAAhZq4gp9c027.png

4. 獲取每個(gè)小方格左上角的最大坐標(biāo)及右下角的最小坐標(biāo),以確定小方格的區(qū)域。并根據(jù)每個(gè)小方格內(nèi)的所有像素點(diǎn)數(shù)據(jù)統(tǒng)一該區(qū)域的像素,統(tǒng)一方式可以是取該區(qū)域內(nèi)像素點(diǎn)的平均值,或者隨機(jī)選取一個(gè)像素。

參考代碼如下:

pYYBAGKQLSGAE46IAABzQyPojdI587.png

5. 通過writeBufferToPixels接口,將統(tǒng)一的像素點(diǎn)數(shù)據(jù)緩存到ArrayBuffer中,并寫入PixelMap,由此得到整張馬賽克處理的圖片。

writeBufferToPixels(src: ArrayBuffer): Promise<void>



四、涂鴉馬賽克

通過上文的介紹,相信大家已經(jīng)基本掌握了馬賽克的實(shí)現(xiàn)。下面我們將為大家?guī)眈R賽克開發(fā)的具體實(shí)例“涂鴉馬賽克”,即可以根據(jù)手指滑動(dòng)的軌跡,生成對應(yīng)的馬賽克區(qū)域。本文僅提供實(shí)現(xiàn)思路及關(guān)鍵代碼,感興趣的小伙伴可結(jié)合上文的介紹補(bǔ)全代碼。

1. 給圖片添加Touch事件,獲取手指的運(yùn)動(dòng)軌跡。參考代碼如下:

poYBAGKQLUGAGADZAABS_-Fmjvk083.png

2. 根據(jù)運(yùn)動(dòng)軌跡,以觸摸點(diǎn)的坐標(biāo)(x,y)為中心,根據(jù)自定義小方格的大小,動(dòng)態(tài)確認(rèn)馬賽克區(qū)域的位置。參考代碼如下:

pYYBAGKQLVGAPgXRAABkMNZ-HMo205.png

3. 統(tǒng)一馬賽克區(qū)域的所有的像素點(diǎn)值。

pYYBAGKQLWWAMSveAABFpATje6g460.png

4. 最后將更改的像素點(diǎn)寫入圖片中,即可得到手指滑動(dòng)軌跡的馬賽克圖片。

以上就是本期全部內(nèi)容,恭喜你花幾分鐘時(shí)間獲得了一個(gè)實(shí)用的技能。期待廣大開發(fā)者能開發(fā)出更多有趣的馬賽克應(yīng)用。

來源:HarmonyOS開發(fā)者

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 馬賽克
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7039
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #硬聲創(chuàng)作季 4-6 馬賽克

    圖像處理馬賽克
    Mr_haohao
    發(fā)布于 :2022年08月30日 18:19:01

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---圖像的馬賽克效果

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---圖像的馬賽克效果.zip[hide][/hide]
    發(fā)表于 05-13 19:46

    請問為什么PCB上會(huì)有馬賽克的東西?

    `請問為什么PCB上會(huì)有這些馬賽克的東西,只有VDD網(wǎng)絡(luò)會(huì)有`
    發(fā)表于 06-18 14:22

    如何解決“馬賽克”問題呢?

    什么是LED顯示屏馬賽克現(xiàn)象?如何解決“馬賽克”問題呢?
    發(fā)表于 06-01 06:56

    基于ArkUI開發(fā)框架,圖片馬賽克處理實(shí)現(xiàn)

    馬賽克處理的原理,同時(shí)給大家?guī)?b class='flag-5'>ArkUI開發(fā)框架圖片馬賽
    發(fā)表于 05-31 18:50

    數(shù)字電視的馬賽克業(yè)務(wù)

    數(shù)字電視為用戶提供了許多模擬電視無法提供的服務(wù),馬賽克業(yè)務(wù)就是其中一種有特色的業(yè)務(wù)。簡要介紹了馬賽克業(yè)務(wù)的原理以及DVB規(guī)范中馬賽克業(yè)務(wù)的實(shí)現(xiàn),并提出了一種利用機(jī)
    發(fā)表于 07-16 15:31 ?22次下載

    iPhone8支持去馬賽克功能,錢包已經(jīng)饑渴難耐

    而近日,有國外網(wǎng)友爆料,蘋果今年9月即將發(fā)布的iPhone 8將支持去馬賽克技術(shù),這是反馬賽克技術(shù)問世后的首部支持去馬賽克的手機(jī)。據(jù)稱,去馬賽克功能
    發(fā)表于 04-06 09:04 ?9211次閱讀

    如何解決"馬賽克"問題呢?

    的。 什么是LED顯示屏馬賽克現(xiàn)象? LED模塊就是把LED(發(fā)光二極管)按一定規(guī)則排列在一起再封裝起來,加上一些防水處理組成的產(chǎn)品,就是LED模組。
    發(fā)表于 01-19 09:17 ?1569次閱讀

    如何解決LED顯示屏“馬賽克”問題

    "馬賽克"現(xiàn)象是一直以來困擾LED顯示屏制造商的難題。從現(xiàn)象上看,LED顯示屏"馬賽克"的現(xiàn)象表現(xiàn)為顯示面亮致性,即均勻性差。
    的頭像 發(fā)表于 05-22 14:42 ?5925次閱讀

    馬賽克模擬屏組成單元_馬賽克模擬屏的分類

    馬賽克模擬屏是一種廣泛電力、煤炭、水利、環(huán)保、公路、鐵路、航空、化工等行業(yè)的電氣設(shè)備,它在安全生產(chǎn)系統(tǒng)中發(fā)揮著不可替代的作用。
    的頭像 發(fā)表于 12-09 14:30 ?5666次閱讀
    <b class='flag-5'>馬賽克</b>模擬屏組成單元_<b class='flag-5'>馬賽克</b>模擬屏的分類

    美國開發(fā)自動(dòng)還原馬賽克的AI開源算法

    看到模糊的照片,是不是有還原真實(shí)面目的沖動(dòng)?以前的技術(shù)做不到,AI時(shí)代一切皆有可能。美國杜克大學(xué)開發(fā)的AI算法就可以做到馬賽克圖片變高清。
    的頭像 發(fā)表于 12-02 13:53 ?1579次閱讀

    Depix:可通過AI一鍵移除馬賽克

    人們都不喜歡馬賽克,以至于誕生出了“馬賽克阻止人類文明進(jìn)步”的箴言。
    的頭像 發(fā)表于 01-04 15:27 ?1.2w次閱讀
    Depix:可通過AI一鍵移除<b class='flag-5'>馬賽克</b>

    近期電視畫面或?qū)⒊霈F(xiàn)馬賽克

    如果你最近看電視,那么小心了,因?yàn)殡娨暜嬅婵赡艹霈F(xiàn)馬賽克。
    的頭像 發(fā)表于 03-07 09:43 ?1810次閱讀

    iPhone13拍照有馬賽克 又現(xiàn)新bug

    iPhone 13 出現(xiàn)了問題,照片自動(dòng)出現(xiàn)馬賽克,并且還有及屏幕顏色分辨不準(zhǔn)確的問題。 從視頻上看,拍之前看沒什么問題,但是拍完后就有了馬賽克,所以iPhone13這次的問題應(yīng)該是屬于軟件算法問題,并不是硬件原因。 iPh
    的頭像 發(fā)表于 09-26 17:14 ?4193次閱讀

    Pooling與馬賽克的秘密

    ?結(jié)合圖像理解,相信你也會(huì)大概明白其中的本意。不過Pooling并不是只可以選取2x2的窗口大小,即便是3x3,5x5等等沒問題,步長(Stride)也是一個(gè)道理。除了神經(jīng)網(wǎng)絡(luò)方面,Pooling為圖片打馬賽克也是可以取得不錯(cuò)的效果,結(jié)合幾個(gè)例子看看。
    的頭像 發(fā)表于 11-20 16:53 ?426次閱讀
    Pooling與<b class='flag-5'>馬賽克</b>的秘密