圖像預處理-添加水印

一.ROI切割

????????類似裁剪圖片,但是原理是基于Numpy數組的切片操作(ROI數組切片是會修改原圖數據的),也就是說這個“裁剪”不是為了保存“裁剪”部分,而是為了方便修改等處理。

import cv2 as cv
import numpy as npimg = cv.imread('../images/demo.png')# 前面是height,后面是width
roi = img[70:380, 81:450]cv.imshow('Original', img)
cv.imshow('ROI', roi)
cv.waitKey(0)
cv.destroyAllWindows()

二.圖像添加水印

????????也將一張圖片中的某個物體或者圖案提取出來,然后疊加到另一張圖片上。通過將原始圖片轉換成灰度圖,并進行二值化處理,得到一個類似掩膜的圖像。

????????簡要來講,就是得到一個目標區域大小的黑背景白logo掩膜(獲取logo顏色),和一個白背景黑logo掩膜(獲取背景顏色),然后兩個分別對logo原圖和目標區域進行與運算,然后處理后的兩個圖做飽和運算,就可以得到有顏色有背景的圖了。

2.1 模板輸入

????????就是包含水印的圖片,先灰度化后二值化(分別用閾值法和反向閾值法),這就得到了白色logo黑背景的掩膜和黑logo白色背景的掩膜。

import cv2 as cv
import numpy as npimg = cv.imread('../images/ymb3.jpg')# 進行灰度轉化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 二值化(閾值法),后續獲取原logo顏色
_, binary = cv.threshold(gray, 250, 255, cv.THRESH_BINARY)
# 二值化(反閾值法),后續獲取目標區域背景色
_, binary_inv = cv.threshold(gray, 250, 255, cv.THRESH_BINARY_INV)# 顯示圖像
cv.imshow('binary', binary)
cv.imshow('binary_inv', binary_inv)
cv.waitKey(0)
cv.destroyAllWindows()

2.2 與運算

????????根據掩膜的大小切割出一個ROI區域,也就是我們要添加水印的區域,之后讓其與模板的兩個掩膜進行運算,就可以得到有logo黑背景黑logo有目標區域背景的掩膜。

import cv2 as cv
import numpy as nplogo = cv.imread('../images/ymb3.jpg')
sy = cv.resize(logo, (150, 150))
img = cv.imread('../images/lvbo.png')# 進行灰度轉化
gray = cv.cvtColor(sy, cv.COLOR_BGR2GRAY)# 二值化(閾值法),后續獲取原logo顏色
_, binary = cv.threshold(gray, 250, 255, cv.THRESH_BINARY)
# 二值化(反閾值法),后續獲取目標區域背景色
_, binary_inv = cv.threshold(gray, 250, 255, cv.THRESH_BINARY_INV)# ROI區域提取,先獲取掩膜大小
print(binary.shape)
print(img.shape)# 從目標圖想要加入水印的地方切片一個相同大小的區域
roi = img[100:250, 100:250]# 掩膜與目標圖進行與運算,獲取目標圖中ROI區域的背景色
bg = cv.bitwise_and(roi, roi, mask=binary)# 掩膜與logo進行與運算,獲取logo中的水印色
wm = cv.bitwise_and(sy, sy, mask=binary_inv)# 顯示圖像
cv.imshow('b', binary)
cv.imshow('bi', binary_inv)
cv.imshow('sy', sy)
cv.imshow('bg', bg)
cv.imshow('wm', wm)
cv.waitKey(0)
cv.destroyAllWindows()  

(150, 150)
(626, 1075, 3)

2.3 圖像融合

目的就是將圖像對應的數組中的對應元素進行相加

????????就是opencv兩張圖相加,飽和運算就是加數值,黑色的區域是0,加5就是5,所以就可以替換黑色變成有顏色的部分。

????????或者使用 OpenCV 的 cv.addWeighted() 方法可以將兩張圖片按權重進行混合。通過調整權重參數,可以控制水印的透明度。

# 合并logo水印與背景色
dst = cv.add(bg, wm)# 將融合圖像插入目標圖中
img[100:250, 100:250] = dst
cv.imshow('re', dst)
cv.imshow('result', img)
cv.waitKey(0)
cv.destroyAllWindows()

我這里是因為圖片里面很多顏色像白色,所以效果沒有特別好。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902246.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902246.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902246.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構——八大排序算法

排序在生活中應用很多,對數據排序有按成績,商品價格,評論數量等標準來排序。 數據結構中有八大排序,插入、選擇、快速、歸并四類排序。 目錄 插入排序 直接插入排序 希爾排序 選擇排序 堆排序 冒泡排序 快速排序 hoare…

吃透LangChain(五):多模態輸入與自定義輸出

多模態數據輸入 這里我們演示如何將多模態輸入直接傳遞給模型。我們目前期望所有輸入都以與OpenAl 期望的格式相同的格式傳遞。對于支持多模態輸入的其他模型提供者,我們在類中添加了邏輯以轉換為預期格式。 在這個例子中,我們將要求模型描述一幅圖像。 …

【Rust 精進之路之第10篇-借用·規則】引用 (``, `mut`):安全、高效地訪問數據

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025年4月20日 引言:所有權的“限制”與“變通”之道 在上一篇【所有權核心】中,我們揭示了 Rust 如何通過所有權規則和移動 (Move) 語義來保證內存安全,避免了垃圾回收器的同時,也防止了諸…

劍指Offer(數據結構與算法面試題精講)C++版——day16

劍指Offer(數據結構與算法面試題精講)C版——day16 題目一:序列化和反序列化二叉樹題目二:從根節點到葉節點的路徑數字之和題目三:向下的路徑節點值之和附錄:源碼gitee倉庫 題目一:序列化和反序…

OpenCV 模板與多個對象匹配方法詳解(繼OpenCV 模板匹配方法詳解)

文章目錄 前言1.導入庫2.圖片預處理3.輸出模板圖片的寬和高4.模板匹配5.獲取匹配結果中所有符合閾值的點的坐標5.1 threshold 0.9:5.2 loc np.where(res > threshold): 6.遍歷所有匹配點6.1 loc 的結構回顧6.2 loc[::-1] 的作用6.2.1 為什么需要反轉…

產品經理學習過程

一:掃盲篇(初始產品經理) 階段1:了解產品經理 了解產品經理是做什么的、產品經理的分類、產品經理在實際工作中都會接觸什么樣的崗位、以及產品經理在實際工作中具體要做什么事情。 二:準備篇 階段2:工…

【消息隊列RocketMQ】一、RocketMQ入門核心概念與架構解析

在當今互聯網技術飛速發展的時代,分布式系統的架構設計愈發復雜。消息隊列作為分布式系統中重要的組件,在解耦應用、異步處理、削峰填谷等方面發揮著關鍵作用。RocketMQ 作為一款高性能、高可靠的分布式消息中間件,被廣泛應用于各類互聯網場景…

從“鏈主”到“全鏈”:供應鏈數字化轉型的底層邏輯

1. 制造業與供應鏈數字化轉型的必然性 1.1. 核心概念與戰略重要性 制造業的數字化轉型,是利用新一代數字技術(如工業互聯網、人工智能、大數據、云計算、邊緣計算等)對制造業的整體價值鏈進行根本性重塑的過程。這不僅涉及技術的應用&#…

x-ui重新申請ssl證書失敗

由于某些需要我們重新申請ssl證書,x-ui自動化腳本不能強制更新,根據x-ui倉庫源碼: https://github.com/vaxilu/x-ui/blob/main/x-ui.sh 在申請ssl證書的地方稍作修改,得到,運行下面的腳本就可以重新申請ssl證書&#…

Java NIO Java 虛擬線程(微線程)與 Go 協程的運行原理不同 為何Go 能在低配機器上承接10萬 Websocket 協議連接

什么是Java NIO? Java NIO(New Input/Output) 是Java 1.4(2002年)引入的一種非阻塞、面向緩沖區的輸入輸出框架,旨在提升Java在高性能和高并發場景下的I/O處理能力。它相比傳統的 Java IO(java…

go環境安裝mac

下載go安裝包:https://golang.google.cn/dl/ 找到對應自己環境的版本下載。 注意有二進制的包,也有圖形界面安裝的包。圖形界面直接傻瓜式點就行了。 二進制的按照下面操作: 1、下載二進制包。 2、將下載的二進制包解壓至 /usr/local目錄…

LVGL源碼(9):學會控件的使用(自定義彈窗)

LVGL版本:8.3 LVGL的控件各式各樣,每種控件都有自己的一些特性,當我們想要使用一個LVGL控件時,我們首先可以通過官網去了解控件的一些基本特性,官網鏈接如下: LVGL Basics — LVGL documentation&#xf…

《軟件設計師》復習筆記(1)——考試介紹【新】

目錄 一、考試介紹 證書價值 考試要求 二、【新】計算機與軟件工程知識 三、軟件設計 一、考試介紹 >考試科目>考題形式>考試時長>合格標準計算機與軟件工程知識75道單選題(每題1分,總分75分)2023年11月改革機試后&#…

MCU中的BSS和data都占用SRAM空間嗎?

在MCU中,BSS段和data段都占用SRAM空間,但它們的存儲方式和用途有所不同。? BSS段 BSS段(Block Started by Symbol)用于存儲未初始化的全局變量和靜態變量。這些變量在程序啟動時會被清零,因此它們不占用Flash空間&a…

Ubuntu 22.04 更換 Nvidia 顯卡后啟動無法進入桌面問題的解決

原顯卡為 R7 240, 更換為 3060Ti 后, 開機進桌面時卡在了黑屏界面, 鍵盤有反應, 但是無法進入 shell. 解決方案為 https://askubuntu.com/questions/1538108/cant-install-rtx-4060-ti-on-ubuntu-22-04-lts 啟動后在開機菜單中(如果沒有開機菜單, 需要按shift鍵), 進入recove…

Python爬蟲-爬取貓眼演出數據

前言 本文是該專欄的第53篇,后面會持續分享python爬蟲干貨知識,記得關注。 貓眼平臺除了有影院信息之外,它還涵蓋了演出信息,比如說“演唱會,音樂節,話劇音樂劇,脫口秀,音樂會,戲曲藝術,相聲”等等各種演出相關信息。 而本文,筆者將以貓眼平臺為例,基于Python爬蟲…

人工智能-機器學習(線性回歸,邏輯回歸,聚類)

人工智能概述 人工智能分為:符號學習,機器學習。 機器學習是實現人工智能的一種方法,深度學習是實現機器學習的一種技術。 機器學習:使用算法來解析數據,從中學習,然后對真實世界中是事務進行決策和預測。如垃圾郵件檢…

FPGA學習(五)——DDS信號發生器設計

FPGA學習(五)——DDS信號發生器設計 目錄 FPGA學習(五)——DDS信號發生器設計一、FPGA開發中常用IP核——ROM/RAM/FIFO1、ROM簡介2、ROM文件的設置(1)直接編輯法(2)用C語言等軟件生成初始化文件 3、ROM IP核配置調用 二、DDS信號發…

【Vue】從 MVC 到 MVVM:前端架構演變與 Vue 的實踐之路

個人博客:haichenyi.com。感謝關注 一. 目錄 一–目錄二–架構模式的演變背景?三–MVC:經典的分層起點?四–MVP:面向接口的解耦嘗試?五–MVVM:數據驅動的終極形態??六–Vue:MVVM 的現代化實踐??? 二. 架構模…

【算法】快速排序、歸并排序(非遞歸版)

目錄 一、快速排序&#xff08;非遞歸&#xff09; 1.原理 2.實現 2.1 stack 2.2 partition(array,left,right) 2.3 pivot - 1 > left 二、歸并排序&#xff08;非遞歸&#xff09; 1.原理 2.實現 2.1 gap 2.1.1 i 2*gap 2.1.2 gap * 2 2.1.3 gap < array.…