亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python 實現圖像快速替換某種顏色

瀏覽:12日期:2022-07-22 18:47:09

最近的對圖像數據進行處理的時候需要將圖像中的某個顏色替換為另一個顏色,但是網絡上找到的方法都是通過對圖像的遍歷進行替換,實在是太費時了!剛開始使用時覺得CPU很快了,一張圖片應該用不了多久,但是實際使用中耗時確實難以接受的!于是自己寫了一個替換程序加快速度,比遍歷快很多,但我覺得不是最快的,應該有通過矩陣索引更快的處理方式,只是我自己暫時并不知道該如何實現,如果以后能夠實現會進行更新,暫時先寫下自己暫時覺得可用的代碼。

一、通過遍歷替換

將圖像中某個顏色替換為另一個顏色一般的做法是遍歷整個圖像,逐一替換,如下:

def replace_color_tran(img, src_clr, dst_clr):’’’ 通過遍歷顏色替換程序@paramimg:圖像矩陣@paramsrc_clr:需要替換的顏色(r,g,b)@paramdst_clr:目標顏色(r,g,b)@return替換后的圖像矩陣’’’img_arr = np.asarray(img, dtype=np.double)dst_arr = img_arr.copy()for i in range(img_arr.shape[1]):for j in range(img_arr.shape[0]):if (img_arr[j][i] == src_clr)[0] == True:dst_arr[j][i] = dst_clrreturn np.asarray(dst_arr, dtype=np.uint8)

二、通過矩陣操作加快替換

但是這樣做,處理速度是很慢的即便是現在CPU很快的情況下。我自己通過numpy矩陣操作將速度提升了一點,具體做法如下:

將圖像的三個通道拆分開來為R,G,B三個通道

將三個通道的數據值進行簡單的編碼,合并為單通道矩陣;

將需要替換的顏色進行同2的編碼,利用改編碼在2中得到的矩陣中得到對應顏色的索引;

利用3中得到的索引將R,G,B三個通道中的對應顏色值替換為目標值;

將得到的三個通道合并為一個圖像數據。

具體實現如下:

def replace_color(img, src_clr, dst_clr):’’’ 通過矩陣操作顏色替換程序@paramimg:圖像矩陣@paramsrc_clr:需要替換的顏色(r,g,b)@paramdst_clr:目標顏色(r,g,b)@return替換后的圖像矩陣’’’ img_arr = np.asarray(img, dtype=np.double) r_img = img_arr[:,:,0].copy() g_img = img_arr[:,:,1].copy() b_img = img_arr[:,:,2].copy() img = r_img * 256 * 256 + g_img * 256 + b_img src_color = src_clr[0] * 256 * 256 + src_clr[1] * 256 + src_clr[2] #編碼 r_img[img == src_color] = dst_clr[0] g_img[img == src_color] = dst_clr[1] b_img[img == src_color] = dst_clr[2] dst_img = np.array([r_img, g_img, b_img], dtype=np.uint8) dst_img = dst_img.transpose(1,2,0) return dst_img

三、結果對比

先看下具體的實現結果,全部測試程序文末給出,(上面的圖片是原圖,下面是替換后的圖片)。

python 實現圖像快速替換某種顏色

python 實現圖像快速替換某種顏色

python 實現圖像快速替換某種顏色

四、程序解釋

通過如下方式編碼的原因是r,g,b三原色的數值本身是順序相關的,為了保證最后索引的一致與準確性,采用將不同數值錯位開。這里的magic number采用256是因為三原色的數值的范圍是[0,255],這樣相乘可以保證數據在二進制上的完全相互交錯而保證該編碼是絕對正確的,當然也可以采用其他形式的編碼或者數值選擇其他數值,我這樣選擇是為了保險起見而已。

img = r_img * 256 * 256 + g_img * 256 + b_img src_color = src_clr[0] * 256 * 256 + src_clr[1] * 256 + src_clr[2] #編碼

五、完整的測試程序

完整的程序:

from PIL import Imageimport osimport numpy as npimport timedef replace_color(img, src_clr, dst_clr):’’’ 通過矩陣操作顏色替換程序@paramimg:圖像矩陣@paramsrc_clr:需要替換的顏色(r,g,b)@paramdst_clr:目標顏色(r,g,b)@return替換后的圖像矩陣’’’ img_arr = np.asarray(img, dtype=np.double) #分離通道 r_img = img_arr[:,:,0].copy() g_img = img_arr[:,:,1].copy() b_img = img_arr[:,:,2].copy()#編碼 img = r_img * 256 * 256 + g_img * 256 + b_img src_color = src_clr[0] * 256 * 256 + src_clr[1] * 256 + src_clr[2] #索引并替換顏色 r_img[img == src_color] = dst_clr[0] g_img[img == src_color] = dst_clr[1] b_img[img == src_color] = dst_clr[2] #合并通道 dst_img = np.array([r_img, g_img, b_img], dtype=np.uint8) #將數據轉換為圖像數據(h,w,c) dst_img = dst_img.transpose(1,2,0) return dst_imgdef replace_color_tran(img, src_clr, dst_clr):’’’ 通過遍歷顏色替換程序@paramimg:圖像矩陣@paramsrc_clr:需要替換的顏色(r,g,b)@paramdst_clr:目標顏色(r,g,b)@return替換后的圖像矩陣’’’img_arr = np.asarray(img, dtype=np.double)dst_arr = img_arr.copy()for i in range(img_arr.shape[1]):for j in range(img_arr.shape[0]):if (img_arr[j][i] == src_clr)[0] == True:dst_arr[j][i] = dst_clrreturn np.asarray(dst_arr, dtype=np.uint8)img = ’1.jpg’img = Image.open(img).convert(’RGB’)res_img = img.copy()count = 20matrix_time = 0trans_time = 0for i in range(count):print(i)start = time.time()dst_img = replace_color(img, (8,10,51), (255,0,0))end = time.time()matrix_time += (end - start)start = time.time()dst_img = replace_color_tran(img, (8,10,51), (255,0,0))end = time.time()trans_time += (end - start)res_img = dst_imgres_img = Image.fromarray(res_img)res_img.save(’2.jpg’)print(’矩陣操作花費時間:’, matrix_time / count )print(’遍歷操作花費時間:’, trans_time / count )

以上這篇python 實現圖像快速替換某種顏色就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 谁有免费黄色网址 | 国产视频黄色 | 日韩中文字幕在线观看 | 久久国产精品免费网站 | 在线观看香蕉视频 | 99久久er热在这里只有精品16 | 国内自拍经典三级在线 | 激情久久婷婷 | 精品国产福利在线观看网址2022 | yiren22开心综合成人网 | 午夜国产精品理论片久久影院 | 91国内在线视频 | 欧美精品一级毛片 | 91成人午夜性a一级毛片 | 国产美女一区二区 | 日韩一区二区国色天香 | 日韩免费在线观看视频 | 999久久久免费精品国产牛牛 | 亚洲无线一二三四手机 | 91热视频在线 | 成人网址在线观看 | 欧美三级欧美一级 | 在线日产一区二区 | 国产精品亚洲四区在线观看 | 黄色三级网站在线观看 | 香蕉片视频在线观看 | 91精品国产乱码久久久久久 | 欧美成人精品福利在线视频 | 羞羞答答免费人成黄页在线观看国产 | 特级全毛片 | 国产欧美精品 | 国语自产拍在线观看7m | 免费的日本一级淫篇小说 | 黄色激情网址 | 国产成人综合亚洲 | 香蕉香蕉国产片一级一级毛片 | 久久综合一区二区三区 | 黑人一区二区 | 簧片视频在线观看 | 亚洲欧美另类在线视频 | 免费看黄网站大全 |