图像“位操作”有什么用?
我們在看優酷視頻時,經常會發現視頻右上角上有“優酷”的字樣。例如:
實際上我們可以把視頻看作一幅幅的圖像,在每幅圖像中,我們把“優酷”這個圖標加上去。于是一個很自然的想法就是圖像相加。
由于圖像相加需要2幅圖像有相同的大小,因為圖像就是矩陣,同維度的矩陣才能相加。于是先生成一副有“優酷”字樣的黑色背景的圖像,讓其與每幅圖像進行相加。
得到相加圖像如下:
我們注意到,“優酷”文字不再是純紅色,而是有了一定的混色。這是因為圖像相加的話,是將相同位置的像素值直接相加,由于原圖像上該文字所在的位置已經有像素值了,于是相加在一起就不是紅顏色了。
那么,一個想法是能不能將原圖像中優酷文字所在的地方摳出來,將其像素值賦為0,然后再相加呢?
當然是可以的!首先我們當然要知道“優酷”文字所在的位置。我們可以用前面提到的《顏色選擇》方法,也可以使用閾值方法:
youku = cv2.imread("youku.jpg") # 轉換成灰度圖,因為閾值操作只針對單通道圖像 youku_gray = cv2.cvtColor(youku, cv2.COLOR_BGR2GRAY) # 閾值操作,灰度值大于50的像素點位置賦值為255 ret, mask = cv2.threshold(youku_gray, 50, 255, cv2.THRESH_BINARY) # 位操作:邏輯非。將黑白反向 mask_inv = cv2.bitwise_not(mask) cv2.imshow("mask_inv", mask_inv) cv2.waitKey()我們注意上面的代碼倒數第3行:
mask_inv = cv2.bitwise_not(mask)這就是一種位操作,“bitwise_not”表示是一種邏輯非操作,即原來是0,變成255,原來是255,變成0。本質是一種反轉操作,即黑色變成白色,白色變成黑色。如果像素某顏色通道值是100,則變成255-100=155。所以,如果是彩色的3通道圖像,bitwise_not會分別對每個通道進行反色處理。
然后將原始圖片中的“優酷”文字位置的地方摳出來:
car_bg = cv2.bitwise_and(car, car, mask=mask_inv) cv2.imshow("car_bg", car_bg)這里的bitwise_and是圖像位操作中的邏輯和操作,即按照像素值的二進制進行相應位置的邏輯和操作。bitwise_and一般與掩膜(mask)共同操作。利用掩膜(mask)進行“與”操作,即掩膜圖像白色區域是對需要處理圖像像素的保留,黑色區域是對需要處理圖像像素的剔除。
為了確保提取的文字區域是一致的。將優酷文字原始圖像也與文字位置掩膜進行操作,最后將2幅圖像加起來:
youku_logo = cv2.bitwise_and(youku, youku, mask=mask) final = cv2.add(car_bg, youku_logo) cv2.imshow("final", final)就得到了文章最前面的帶“優酷”水印的圖像。
總結
以上是生活随笔為你收集整理的图像“位操作”有什么用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像“颜色选择”怎么用?
- 下一篇: 选择图像的“感兴趣区域”