日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于二维码分块上色(彩色二维码)的算法研究

發(fā)布時(shí)間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于二维码分块上色(彩色二维码)的算法研究 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文:關(guān)于二維碼分塊上色(彩色二維碼)的算法研究

眾所周知,二維碼通常是黑白的,而且是由若干個(gè)長方形或正方形小塊平鋪而成。但從人們的審美角度來看,常見的黑白二維碼不免讓人審美疲勞。本文試著從分塊上色的角度對(duì)二維碼進(jìn)行美化,并嘗試講一下“美化”的編程思路。

一、緣由及目的:

首先,我們來看看正常情況下的黑白二維碼,如圖1:

圖1? 普通二維碼(黑白條塊)

上色的難點(diǎn)在于如何上色,上什么色,也就是哪些塊“著”什么顏色。(關(guān)于彩色二維碼的效果,請(qǐng)參考我的另一篇文章:《C#彩色藝術(shù)化二維碼樣式設(shè)計(jì)(僅說思路)》http://blog.csdn.net/johnsuna/article/details/7933619)

如果上錯(cuò)了色,也會(huì)成為“大花臉”,變得并不藝術(shù)。就好像漂亮的農(nóng)村姑娘,如果穿上大花衣裳,看上去鮮艷,但仍然顯示不出其天生的麗質(zhì),反而顯得“很土”。如下圖2及圖3:

?

圖2? ?大花臉式的彩色二維碼

圖3? 單塊隨機(jī)色(彩色)二維碼

而上色的難點(diǎn)在于分塊,也就是將二維碼分成多少塊、如何分塊,相關(guān)色塊上什么顏色,后一個(gè)問題是美術(shù)工程師考慮的,不在本文討論范圍之內(nèi)。從圖1,圖2來看,分塊的歸類并不容易或者說我們從外觀上還不好判斷哪些塊分在一起成為一個(gè)大色塊。

經(jīng)過上面圖3、下面圖4的圓角化處理后,色塊的劃分是顯而易見的。具體如何圓角化處理,請(qǐng)見我的另一篇文章《C#彩色藝術(shù)化二維碼樣式設(shè)計(jì)(僅說思路)》http://blog.csdn.net/johnsuna/article/details/7933619?及http://blog.csdn.net/johnsuna/article/details/7948907。

圖4? 圓角化藝術(shù)二維碼(黑白色)

為了闡述方便,我將圖1的關(guān)鍵塊進(jìn)行了編號(hào),如下圖5所示:

圖5?? 對(duì)圖1黑白二維碼相關(guān)關(guān)鍵色塊進(jìn)行編號(hào)

與圖5相對(duì)應(yīng),圖6為圓角化分塊后的帶編號(hào)的圖片:

圖6???對(duì)圖2的關(guān)鍵塊進(jìn)行編號(hào)

下圖7為們我要的最終效果:

圖7? 最終需要的效果示意

盡管我的上色功夫(美感)不怎么樣,但總體效果比圖1-圖4的效果確實(shí)好多了。

二、算法研究:

如下圖8所示,為了方便講述,我將圖7中色塊7、8、9、10、11中的每個(gè)單元格又按a,b,c……進(jìn)行了編號(hào)并給每個(gè)單元格加了一個(gè)黑邊框。

圖8? 單元格

圖8中,單元格7a和7b最終組成一個(gè)豎條色塊,單元格8為一個(gè)獨(dú)立的色塊,9a與9b組成一個(gè)橫條色塊,而10a,10b...f 又組成一個(gè)L形的色塊。如圖7所示,12-18等由多個(gè)單元格彼此相連而組成一個(gè)大的色塊,其中,編號(hào)為16的色塊面積最大。

接下來,重點(diǎn)研究算法。

首先必須找到分塊的“點(diǎn)”,觀察圖7和圖8,我們經(jīng)過對(duì)比可以發(fā)現(xiàn),分隔各塊之間的交接點(diǎn)有一個(gè)共同的規(guī)律:交接點(diǎn)外圍相鄰對(duì)角均為空

具體地說,就是:以“交接點(diǎn)”為中心的3*3個(gè)單元格區(qū)域(含交接點(diǎn)本身)內(nèi),如果該交接點(diǎn)的外圍8個(gè)點(diǎn)中,有兩個(gè)斜角(不管是呈現(xiàn)“/”或“\”,也不管是哪一個(gè)角位,如左上或右下,或左下或右上)的點(diǎn)均為空白,那么,此點(diǎn)必為分塊關(guān)鍵點(diǎn),也就是“交接點(diǎn)”。

經(jīng)過觀察和研究,還有一種辦法,那就是“廣度優(yōu)先遍歷”。如下圖:

圖9? 單點(diǎn)水平/垂直延伸法示意

此算法也是棋牌或連連看等游戲常用的算法了。網(wǎng)上有很多類似的例子,就不再詳解。另外,此算法可以與分形遞歸算法相結(jié)合,實(shí)現(xiàn)快速有效地對(duì)整個(gè)圖像的分塊上色。

總結(jié)

以上是生活随笔為你收集整理的关于二维码分块上色(彩色二维码)的算法研究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。