1. 程式人生 > >影象“位操作”有什麼用?

影象“位操作”有什麼用?

我們在看優酷視訊時,經常會發現視訊右上角上有“優酷”的字樣。例如:
這裡寫圖片描述
實際上我們可以把視訊看作一幅幅的影象,在每幅影象中,我們把“優酷”這個圖示加上去。於是一個很自然的想法就是影象相加。

由於影象相加需要2幅影象有相同的大小,因為影象就是矩陣,同維度的矩陣才能相加。於是先生成一副有“優酷”字樣的黑色背景的影象,讓其與每幅影象進行相加。
這裡寫圖片描述

import cv2
car = cv2.imread("car.jpg")
youku = cv2.imread("youku.jpg")
car_and_youku = cv2.add(car, youku)
cv2.imshow("car_and_youku"
, car_and_youku) cv2.waitKey()

得到相加影象如下:
這裡寫圖片描述
我們注意到,“優酷”文字不再是純紅色,而是有了一定的混色。這是因為影象相加的話,是將相同位置的畫素值直接相加,由於原影象上該文字所在的位置已經有畫素值了,於是相加在一起就不是紅顏色了。

那麼,一個想法是能不能將原影象中優酷文字所在的地方摳出來,將其畫素值賦為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)

就得到了文章最前面的帶“優酷”水印的影象。

相關推薦

影象操作”有什麼用?

我們在看優酷視訊時,經常會發現視訊右上角上有“優酷”的字樣。例如: 實際上我們可以把視訊看作一幅幅的影象,在每幅影象中,我們把“優酷”這個圖示加上去。於是一個很自然的想法就是影象相加。 由於影象相加需要2幅影象有相同的大小,因為影象就是矩陣,同維度的矩陣

OpneCV之影象的基本操作:形狀、通道分離/合併、影象混合、相加、操作——python實現

一、讀入圖片獲得畫素點的畫素值、改變畫素值、改變單個通道畫素值、獲得影象的行、列、影象資料型別、畫素點、ROI區域. import cv2 import numpy as np #讀取一個彩色影象 img = cv2.imread('C:/Users/NWPU/Desktop/1.jpg')

VMware12提示 已將該虛擬機配置為使用 64 客戶機操作系統。但是,無法執行 64 操作

http 操作 技術分享 步驟 啟動 如果 sdn 重啟 cpu VMware12提示 已將該虛擬機配置為使用 64 位客戶機操作系統。但是,無法執行 64 位操作。 此主機支持 Intel VT-x,但 Intel VT-x 處於禁用狀態 解決辦法: 下

Redis操作

val not png log .cn 設置 http get blog setbit key offset value 設置offset對應二進制位上的值 getbit key offset 作用:獲取值的二進制表示,對應位上的值(從左,從0編號) bitop

VMware Workstation 安裝CentOS 6.5_64操作系統步驟說明

... lin 6.5 linu iso sta 使用 地址 技術 這裏的VMware Workstation 8.0安裝步驟就不說了,主要說CentOS 6.5_64位的安裝說明 選擇Create a New Virtual Machine,創建一個新的虛擬機: 在N

C語言復習2之操作

位操作位操作 位操作是程序設計中對位模式按位或二進制數的一元和二元操作. 在許多古老的微處理器上, 位運算比加減運算略快, 通常位運算比乘除法運算要快很多. 在現代架構中, 情況並非如此:位運算的運算速度通常與加法運算相同(仍然快於乘法運算)。 位運算符 取反(~)是一元運算符, 對一個

java中的操作

ble 其他 自動 byte 有符號 cnblogs 運算 編譯 位移操作 之前做項目的時候使用位操作不是很多,今天在刷leetcode上題目的時候用到了位操作,是leetcode中的第29題Divide Two Integers。 一、java的位操作: 位運算表達式由操

win7_64操作系統安裝python3.6.3遇到的問題和解決方法

描述 要求 其中 官網 ros tails 知識 pack 小夥伴 今天使用win7 64位系統安裝python3.6.3時遇到了很多問題,接下來就總結一下問題以及解決方法 首先在下載Python3的時候遇到了問題,官網上下載的時候會給我們這種小白帶來一些誤導,看圖 圖中標

js操作

個數 bsp 最終 span 都是 過程 ack 例如 ~~ 1.&(與) 都是1才是1 例如:14&15 (14 二進制 1110 15 二進制 1111

Go基礎之--操作中你所不知道的用法

turn 自己 use 應用 const 代碼 只需要 寫法 直接 之前一直忽略的就是所有語言中關於位操作,覺得用處並不多,可能用到也非常簡單的用法,但是其實一直忽略的是它們的用處還是非常大的,下面先回顧一下位操作符的基礎 位操作符 與操作:&1 & 1 =

通過操作實現四則運算

test sub () return expect 意思 define 掌握 功能 在最早學習四則運算的過程中,我們其實就已經掌握了進制算法,這一次我將對二進制運用這個進制算法來實現四則運算。 四則運算 math.c /** * 功能:通過位操作實現四則運算 * 算法:

操作實現加減乘除四則運算

tle 參與 nbsp pre 圖片 操作數 整數 spa 或操作 解決方案 需要熟練掌握一些常見的位操作實現,具體為: 1)常用的等式:-n=~(n-1)=~n+1 2)獲取整數n的二進制中最後一個1:n&(-n)或者n&~(n-1)如:n=010100,

如何給戴爾(DELL)服務器安裝linux7.2X86 64操作系統

戴爾DELL 服務器 安裝系統 Linux7.2 Linux 一、準備工具1.筆記本電腦一臺2.網線一根3.linux7.2 64位鏡像文件一份二、思路1.登錄管理界面,開啟虛擬控制2.導入並掛載鏡像文件3.新建RAIDcipanzheng磁盤陣列4.設置安裝選項,選擇安裝環境和需要安裝的

操作

gpo sig nbsp signed 16px clas 操作 font sign 1、將a中的第10位置1,其他位不變 a |= (1<<10); (1)將a中第10、15、20位置1,其他位不變 a |= ((1<<10)+(1<&

[翻譯] Linux 內核中的位數組和操作

用法 修改 CP 容易 並且 strong face 是我 hot Linux 內核裏的數據結構 [TOC] 原文鏈接與說明 https://github.com/0xAX/linux-insides/blob/master/DataStructures/bitmap.m

VMware12提示 已將該虛擬機配置為使用 64 客戶機操作系統。但是,無法執行 64 操作

一個 電腦 war 虛擬 客戶機 enter bio file cpu VMware12提示 已將該虛擬機配置為使用 64 位客戶機操作系統。但是,無法執行 64 位操作。 此主機支持 Intel VT-x,但 Intel VT-x 處於禁用狀態 解決辦法: 下載Leo

操作基礎知識了解一下

style 一位 print else 八皇後 lse 了解 異或運算 滿足 在刷題和完成實驗室給的作業中,有關位操作的問題還是挺多的,所以在這裏再寫一遍加深學習記憶233 位操作是基於二進制進行運算的,所以本文所有描述均基於二進制 一,基礎操作符: "&am

WIN7 環境下搭建 PHP7(64 )操作步驟

再次 丟失 word srv sql ram 安裝目錄 only mys WIN7 環境下搭建 PHP7(64 位)操作步驟 一、安裝與配置 Apache 1、下載 Apache下載地址:https://www.apachelounge.com/download/ 2、

原則《64操作系統需要安裝64位數據庫》

基本原則 int rlock rri note alloc crc32 crc ems 數據庫安裝基本原則,64位操作系統,安裝64位數據庫。 2018-09-17 21:32:01 5676 [Note] Plugin ‘FEDERATED‘ is disabled. 2

java Integer中的方法解析(操作

方法 描述 static int bitCount(int i) 返回i的二進位制中1的個數. static int compare(int x, int y)