圖像拼接案例,摳圖案例

目錄

一.圖像拼接案例

1.圖像拼接項目介紹

2.核心步驟

①計算圖片特征點及描述符

②匹配特征點,使用暴力匹配器

③篩選有效匹配

④計算透視變換矩陣

⑤應用變換和拼接

二.摳圖案例

1.縮放旋轉處理

2.轉化為灰度圖并二值化

3.找出所有輪廓,并在img的副本上畫出

4.排序輪廓找到最大的扇子輪廓

5.創建掩膜

6.’與‘操作,完成摳圖


一.圖像拼接案例

1.圖像拼接項目介紹

  • 目標:將兩張視角不同、角度傾斜的圖片(如包含A/B/C物的圖片)如下通過算法融合,使其在同一平面視角下呈現。
  • 技術路徑:
    • 使用SIFT特征提取兩個圖片中的關鍵點和描述符。
    • 采用暴力匹配器(bf_match)進行特征匹配,因其適用于特征點數量較少的場景
    • 基于匹配結果計算并應用透視變換,最終完成兩圖拼接。

2.核心步驟

讀取拼接圖片????????

def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)
#讀取拼接圖片
imageA=cv2.imread('1.jpg')
cv_show('imageA',imageA)
imageB=cv2.imread('2.jpg')
cv_show('imageB',imageB)

①計算圖片特征點及描述符

使用SIFT算法從兩張圖片中提取關鍵點和描述符,利用BFMatcher進行暴力匹配,獲得初步的點對匹配結果。

特征提取我們直接定義一個方法來實現

def detectAndDescribe(image):gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)sift=cv2.SIFT_create()(kps,des)=sift.detectAndCompute(gray,None)kps_float=np.float32([kp.pt for kp in kps])return (kps,kps_float,des)

kps_float是特征點的坐標x和y的ndarray類型的數組

#計算圖片特征點及描述符
(kpsA,kps_floatA,desA)=detectAndDescribe(imageA)
(kpsB,kps_floatB,desB)=detectAndDescribe(imageB)

②匹配特征點,使用暴力匹配器


#建立暴力匹配器
matcher=cv2.BFMatcher()
rawMatches=matcher.knnMatch(desB,desA,k=2)

③篩選有效匹配

通過設定距離閾值(如近點距離小于遠點距離的65%)篩選出可靠的匹配點。

good=[]
matches=[]
for m in rawMatches:if len(m)==2 and m[0].distance<0.65*m[1].distance:good.append(m)matches.append((m[0].queryIdx,m[0].trainIdx))
print(len(good))
print(matches)31
[(14, 76), (36, 105), (39, 105), (63, 118), (65, 121), (66, 122), (74, 130), (83, 128), (87, 136), (93, 140), (105, 147), (118, 172), (138, 176), (154, 191), (155, 192), (158, 198), (164, 213), (165, 206), (176, 217), (185, 227), (201, 242), (202, 243), (204, 246), (207, 250), (209, 255), (212, 257), (217, 7), (228, 275), (229, 276), (231, 275), (233, 276)]

good存放匹配成功的最近點和次近點相關信息

matches用來存放desA特征圖片的匹配成功特征點索引和desB特征圖片的匹配成功特征點索引的元組

畫出兩幅圖之間的特征點對應聯系

vis=cv2.drawMatchesKnn(imageB,kpsB,imageA,kpsA,good,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv_show('Keypoint Matches',vis)

④計算透視變換矩陣

利用篩選出的核心特征點,計算出變換矩陣H使得一張圖片能精確地“變形”到與另一張圖片相同的視角平面上。

#透視變換
if len(matches)>4:#當篩選后的匹配對大于4時,計算視角變換矩陣#獲取匹配對的點坐標ptsB=np.float32([kps_floatB[i] for (i,_) in matches])ptsA=np.float32([kps_floatA[i] for (_,i) in matches])(H,mask)=cv2.findHomography(ptsB,ptsA,cv2.RANSAC,10)
else:print('圖片未找到四個以上的匹配點')sys.exit()

注意點數范圍(至少4個)

mask數組用于標識內點與外點。

⑤應用變換和拼接

變換,這里圖片的寬度我們使用土圖片A和圖片B的寬度和方便后面直接將A圖片拼接上來

result=cv2.warpPerspective(imageB,H,(imageB.shape[1]+imageA.shape[1],imageB.shape[0]))
cv_show('resultB',result)

拼接,將圖片A傳入result圖片最左端

#將圖片A傳入result圖片最左端
result[0:imageA.shape[0],0:imageA.shape[1]]=imageA
cv_show('result',result)
cv2.imwrite('pingjie.jpg',result)

二.摳圖案例

實現只將圖中的扇子摳圖出來,核心技術用到掩膜

1.縮放旋轉處理

import cv2
import numpy as npimg=cv2.imread('img.jpg')
img=cv2.resize(img,(640,480))
img=np.rot90(img,1)
cv2.imshow('img',img)

2.轉化為灰度圖并二值化

這里我們沒有使用閾值的方法來二值化而是使用Canny()邊緣檢測實現二值化

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edged=cv2.Canny(gray,75,200)
cv2.imshow('edged',edged)
cv2.waitKey(0)

3.找出所有輪廓,并在img的副本上畫出

cnts=cv2.findContours(edged.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]
cv2.drawContours(img_cnts,cnts,-1,(0,0,255),2)
cv2.imshow('img_cnts',img_cnts)
cv2.waitKey(0)

4.排序輪廓找到最大的扇子輪廓

cnt=sorted(cnts,key=cv2.contourArea,reverse=True)[0]

5.創建掩膜

先創建和eddged圖片等大的全黑掩膜,再根據扇子的輪廓把掩膜中該部分變成白色

mask = np.zeros(edged.shape, dtype='uint8')
cv2.drawContours(mask, [cnt], -1, 255, -1)  # -1表示填充
cv2.imshow('mask',mask)
cv2.waitKey(0)

6.’與‘操作,完成摳圖

img_mask_and=cv2.bitwise_and(img,img,mask=mask)
cv2.imshow('img_mask_and',img_mask_and)
cv2.waitKey(0)

cv2.bitwise_and(img,img,mask=mask)會指將掩膜中白色的部分顯示出來

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

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

相關文章

【左程云算法筆記016】雙端隊列-雙鏈表和固定數組實現

目錄 1&#xff09;雙端隊列的介紹 2&#xff09;雙端隊列用雙鏈表的實現代碼演示 3&#xff09;雙端隊列用固定數組的實現 代碼演示 視頻 【算法講解016【入門】雙端隊列-雙鏈表和固定數組實現】 Leecode leecode641 設計循環雙端隊列 1&#xff09;雙端隊列的介紹 可以…

ffplay視頻輸出和尺寸變換

視頻輸出模塊 視頻輸出初始化的主要流程 我們開始分析視頻&#xff08;圖像&#xff09;的顯示。 因為使?了SDL&#xff0c;?video的顯示也依賴SDL的窗?顯示系統&#xff0c;所以先從main函數的SDL初始化看起&#xff08;節選&#xff09;&#xff1a; int main(int argc, c…

協議_https協議

http http協議是將數據以明文的形式在網絡上傳輸。若是傳輸的數據中包含一些敏感信息比如銀行卡信息等可能會被有心人攻擊造成信息泄露或被篡改。 總結&#xff1a;http協議進行數據傳輸難以保證數據的隱私性以及數據完整性&#xff0c;為了保證數據的準確定引入了https這一協…

阿里云 騰訊云 API 自動化查詢指南

文章目錄一、核心思路與架構建議二、經驗與核心建議三、技術方案選型建議四、API使用詳解4.1 阿里云4.2 騰訊云五、進階&#xff1a;與內部系統聯動免費個人運維知識庫&#xff0c;歡迎您的訂閱&#xff1a;literator_ray.flowus.cn 一、核心思路與架構建議 自動化流程可以概括…

【Unity 性能優化之路——概述(0)】

Unity性能優化概述性能優化不是某個環節的極致壓榨&#xff0c;而是所有模塊的協同共進。本文將為你建立完整的Unity性能優化知識體系。很多Unity開發者一提到性能優化&#xff0c;首先想到的就是Draw Call、Batches這些渲染指標。這沒錯&#xff0c;但它們只是性能優化中的一部…

靈碼產品演示:軟件工程架構分析

作者&#xff1a;了哥 演示目的演示靈碼對于整個復雜軟件工程項目的架構分析能力&#xff0c;輸出項目的軟件系統架構圖。演示文檔接口生成能力。演示準備 克隆工程地址到本地&#xff08;需提前安裝好 git 工具&#xff0c; 建議本地配置 brew&#xff09;&#xff1a; git cl…

銀河麒麟部署mysql8.0并連接應用

?客戶需在國產化銀河麒麟系統中部署軟件應用&#xff0c;使用mysql8.0數據庫。機器放置了兩三年&#xff0c;里面命令工具和依賴都不太全。而且客戶環境不聯網&#xff0c;只能采用離線部署的方式。部署過程中踩了很多坑&#xff0c;也用到很多資源&#xff0c;記錄一下。 過…

GitAgent-面壁智能聯合清華大學發布的大模型智能體應用框架

本文轉載自&#xff1a;https://www.hello123.com/gitagent ** 一、&#x1f50d; GitAgent 框架&#xff1a;大模型智能體的工具箱革命 GitAgent 是由面壁智能與清華大學自然語言處理實驗室聯合研發的創新型框架&#xff0c;旨在解決大模型智能體在復雜任務中的工具擴展瓶頸…

靈碼產品演示:Maven 示例工程生成

作者&#xff1a;輕眉 演示主題&#xff1a;由 AI 自動生成 0 到 1 的電商訂單 Java 項目 演示目的 面向 Java 零基礎的用戶&#xff0c;通過靈碼的產品能力&#xff08;如提示詞、編碼智能體、項目 Rules 和 SQLite MCP 服務、單元測試&#xff09;自動生成 0 到 1 的電商訂單…

AI編程從0-1開發一個小程序

小伙伴們&#xff0c;今天我們利用AI實現從0到1開發一個小程序&#xff01;需求交給AI&#xff1a; 我們只要說出自己的開發思路&#xff0c;具體需求交給AI完成&#xff01;輸入提示詞&#xff1a;個人開發的小程序 能開發哪些好備案&#xff0c;用戶喜歡使用的 AI給出…

DDoS高防IP是什么? DDoS攻擊會暴露IP嗎?

DDoS高防IP是什么&#xff1f;高防IP是指一種網絡安全服務&#xff0c;主要用于防御DDoS攻擊。隨著技術的發展&#xff0c;黑客進行網絡攻擊的強度也在加大&#xff0c;所以我們要做好網絡防護&#xff0c;及時預防DDoS攻擊。DDoS高防IP是什么&#xff1f;DDoS高防IP是指基于IP…

k8s事件驅動運維利器 shell operator

Shell-Operator 概述 Shell-Operator 是 Kubernetes 的一個工具&#xff0c;用于通過 shell 腳本擴展集群功能。它允許用戶編寫簡單的腳本&#xff08;Bash、Python 等&#xff09;來響應 Kubernetes 事件&#xff08;如資源變更、定時任務&#xff09;&#xff0c;無需編譯復…

(二)文件管理-文件權限-chmod命令的使用

文章目錄1. 命令格式2. 基本用法2.1 符號模式2.2 八進制數字模式3. 高級用法3.1 遞歸操作3.2 參考權限3.3 特殊權限位(Setuid, Setgid, Sticky Bit)3.4 X 特殊執行權限4. 注意事項4.1權限與所有權4.2 Root 權限4.3 安全風險4.4 -R 的風險4.5 目錄的執行權限1. 命令格式 chmod …

醫院預約掛號腳本

醫院預約掛號腳本 功能介紹 本腳本是一個用 Python 編寫的醫院預約掛號程序&#xff0c;支持以下功能&#xff1a; 自動預約&#xff1a;通過api交互選擇醫院、科室、醫生和時間段。自動監控&#xff1a;持續檢查指定醫生的號源狀態&#xff0c;發現可預約時段時自動嘗試預約。…

.NET駕馭Word之力:理解Word對象模型核心 (Application, Document, Range)

在使用MudTools.OfficeInterop.Word庫進行Word文檔自動化處理時&#xff0c;深入理解Word對象模型的核心組件是至關重要的。Word對象模型提供了一套層次化的結構&#xff0c;使開發者能夠通過編程方式控制Word應用程序、文檔以及文檔內容。本章將詳細介紹Word對象模型中最核心的…

Kotlin在醫療大健康域的應用實例探究與編程剖析(上)

一、引言 1.1 研究背景與意義 在當今數字化時代,醫療行業正經歷著深刻的變革。隨著信息技術的飛速發展,尤其是人工智能、大數據、物聯網等新興技術的廣泛應用,醫療行業數字化轉型已成為必然趨勢。這種轉型旨在提升醫療服務的效率和質量,優化醫療資源配置,為患者提供更加…

AI智能體的應用前景

AI智能體的應用前景正從技術探索邁向規模化落地的關鍵階段,其發展動力源于大模型能力的突破、行業需求的深化以及商業化模式的創新。以下是基于最新技術動態和行業實踐的深度解析: 一、技術突破:從「有腦無手」到「知行合一」 大模型的進化顯著提升了智能體的多模態交互與…

高系分四:網絡分布式

目錄一、我的導圖和思考二、大模型對我導圖的評價優點可優化之處三、大模型對這章節的建議一、網絡知識范疇&#xff08;一&#xff09;網絡基礎理論&#xff08;二&#xff09;局域網與廣域網&#xff08;三&#xff09;網絡安全&#xff08;四&#xff09;網絡性能優化&#…

Day24_【深度學習(1)—概念】

一、AI、ML、DL基本關系 機器學習是實現人工智能的途徑&#xff0c;深度學習是機器學習的一種方法。人工智能 (AI)↓ 機器學習 (ML) —— 讓機器從數據中學習規律↓ 深度學習 (DL) —— 使用深層神經網絡的機器學習方法二、深度學習與機器學習概念深度學習&#xff08;Deep Lea…

VTK基礎(01):VTK中的基本概念

VTK中的基本概念 1.三維場景中的基本要素 三維場景的基本要素包含&#xff1a;燈光、相機、顏色和紋理映射 (1)燈光vtkLight 光的本質是特定頻段的電磁波&#xff0c;所以燈光的本質是特定頻段&#xff08;可見光頻段&#xff09;的電磁波發射器&#xff1b;依據發射可見光頻段…