OpenCV位運算實現影象融合
OpenCV在計算機視覺處理方面提供了很多強大的工具,使用OpenCV可以很容易的對影象進行各種算數運算,本文主要介紹通過位運算把兩張圖片融合成一張圖片,可用於新增水印等。
在網上隨意找了兩張圖,一張是google logo,一張是deep learning圖片:
使用OpenCV把google logo作為水印新增到deep learning圖上,最終效果如下:
實現思路
把google logo 圖片除了google這幾個字以外的畫素都變為0;把deep learning圖片需要嵌入google logo圖片的位置上的畫素都變為0;那麼最後把兩張圖片畫素相加的時候,除了google這幾個字,其他的畫素值都是deep learning的畫素。
實現步驟
1.載入圖片,圖片相加需要有相同的寬和高,所以先構建一個新的圖片google_resize,大小和 dl_img
相同
google_logo = cv2.imread('google.jpg') # google logo 圖片
dl_img = cv2.imread('dl.jpg') # deep learning 圖片
google_resize = np.ones(dl_img.shape, np.uint8)
google_resize = google_resize * 255 # 白色背景
google_resize[0:google_logo.shape[0 ], 0:google_logo.shape[1]] = google_logo
- 構建mask和mask_inv影象
google_logo_gray = cv2.cvtColor(google_resize, cv2.COLOR_BGR2GRAY)
# 閾值操作,灰度值大於200的畫素點位置賦值255,其他畫素點位置賦值0
ret, mask = cv2.threshold(google_logo_gray, 200, 255, cv2.THRESH_BINARY)
# 取反操作,mask中255的畫素點值變為0, 值為0的畫素點新值為255
mask_inv = cv2.bitwise _not(mask)
- 對影象應用mask
google_logo_fg = cv2.bitwise_and(google_resize, google_resize, mask = mask_inv)
dl_bg = cv2.bitwise_and(dl_img, dl_img, mask = mask)
- 影象相加融合,得到最終結果
added_img = cv2.add(google_logo_fg, dl_bg)
相關推薦
OpenCV位運算實現影象融合
OpenCV在計算機視覺處理方面提供了很多強大的工具,使用OpenCV可以很容易的對影象進行各種算數運算,本文主要介紹通過位運算把兩張圖片融合成一張圖片,可用於新增水印等。 在網上隨意找了兩張圖,一張是google logo,一張是deep
23.位運算實現加法
turn 結果 add urn () pre col body class 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int add(int a, int b) 5 { 6
用位運算實現四則運算之加減乘除(用位運算求一個數的1/3) via Hackbuteer1
esp sub 沒有 正整數 過程 介紹 異或 sin 完成 轉自:http://blog.csdn.net/hackbuteer1/article/details/7390093 ^: 按位異或;&:按位與; | :按位或 計算機系統中,數值一律用補碼來表示:因為
c-1:位運算:實現整數的加減乘除四則運算
首先回憶計算機組成原理學過的內容,數字在機器ALU運算邏輯單元內部是以補碼形式進行運算的,因為補碼有兩個優勢:1、能做到符號位和數值部分一起運算,這樣無需單獨考慮符號。2、能把減法運算轉化為加法運算來處理。3、補碼的沒有正0和負0之分,所以表示範圍比原碼和反碼多1個。問題一: 位運算實現加法不管是十進位制加法
使用位運算實現加減乘除
在不使用+,-,*,/,四則運算子號的情況下,通過基本位運算實現加減乘除四則運算。 1. C++中使用位運算實現加法 首先,我們通過對x和y進行&位運算,得出每一位上的進位。然後對x和y進行^位運算,得出沒有加進位的和。最後將所得的和當做新的x,所得的進位往
c語言用位運算實現兩個數平均數
c語言用位運算實現兩個數平均數 對於十進位制而言,向右移動一位就是除以10, 對於二進位制而言,向右移動一位就是除以2, 對於八進位制而言,向右移動一位就是除以8, 對於十六進位制而言,向右移動一位就是除以16 因為計算機是通過二進位制來計算的,知道這個規律之後我們可以編寫程式碼 int
用位運算實現四則運算之加減乘除(用位運算求一個數的1/3)
聽同學百度二面中,不準用四則運算操作符來實現四則運算。一想就想到了計算機組成原理上學過的。位運算的思想可以應用到很多地方,這裡簡單的總結一下用位運算來實現整數的四則運算。加法運算:int AddWithoutArithmetic(int num1,int num2){ if(n
用位運算實現求絕對值-有效避開if-else判斷
一般情況下,如果要我們寫一個求絕對值的函式,我們的實現很有可能會是這樣: template<class T>T abs_Normal(T tNum){ if(tNum >0.0) return tNum; elsereturn-tNum;} 也就
[LeetCode][7]Reverse Integer解析與位運算實現 -Java實現
Q: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 A: 以下解法和程式碼沒有借閱以往任何資料,如果有更好的解法請在評論區留言 這
c基礎【一】利用位運算實現數字反轉
#include <stdio.h> #include <stdlib.h> int main() { //通過位運算實現數字的反轉(操作的物件必須是整數) unsigned int original =0x123; unsig
【演算法】位元位計算(A+B Problem)-位運算子介紹、位運算實現加減乘除
問題描述 問題:計算A+B,不適用“+”運算子(LintCode 1.A + B Problem) 注意:A B均為32位整數,可使用位元位計算 解決思路 演算法示例 程式碼如下:(通過LintCode測試) class Solution
位運算-實現加減乘除
res oid font ont 分享圖片 != family highlight args 基本性質:1:~n=-(n+1),比如:~3=-4 2:獲取整數n的二進制串中最後一個1:-n&n=~(n-1)&n
用位運算實現十進位制轉換為二進位制
程式碼如下: 1 #include <iostream> //將十進位制數轉化為二進位制數,位運算的取位操作 2 using namespace std; 3 int main() 4 { 5 unsigned short i; 6
《程式設計之美 》2.1 位運算實現—交換兩個整數、求和、整數的二進位制表達中1的個數
序 能否利用位運算高效的實現部分演算法是面試中的常見考題,現在講該部分總結如下。 一、不用額外變數交換兩個整數的值 void exchange(int &a , int &b) {
用位運算實現四則運算之加減乘除
//遞迴版本 int _add(int num1,int num2){ int sum,carry; if(num2==0) return num1;//沒有進位的時候完成運算 sum=num1^num2;//完成第一步沒有進位的加法運算
opencv之分水嶺實現影象分割
本文需要了解的庫函式有: void cvWatershed( const CvArr* image, CvArr* markers );//分水嶺演算法分割影象void cvAddWeighted( const CvArr* src1, double alpha,
利用位運算實現兩個整數的加法運算,請程式碼實現,並作簡要說明。
#include <stdio.h> int main(void) { int add(int a,int b); int m,a,b; scanf("%d,%d",&a,&b); m
OpenCV學習 kmeans實現影象分割
using namespace std; using namespace cv; int main() { const int MAX_CLUSTERS = 5; Vec3b colorTab[] = { Vec3b(0, 0, 255), Vec3b(0,
opencv學習日記之影象融合
這裡的影象疊加指線性疊加,設影象A的畫素為fA(x),影象B的畫素為fB(x),疊加係數為α,則線性疊加操作為: α為0-1之間的值,從上面也可以看出,疊加必需保證兩幅輸入影象的尺寸大小相同。
利用位運算實現加密解密
public static void main(String[] args) { // TODO 自動生成方法存根 Scanner scanner = new Scanner(System.in); System.out.println("請輸入要加密的英文字串或