day28圖像處理OpenCV

文章目錄

  • 一、圖像預處理
    • 4 邊緣填充
      • 4.1 邊界復制(BORDER_REPLICATE)
      • 4.2 邊界反射(BORDER_REFLECT)
      • 4.3 邊界反射101(BORDER_REFLECT_101)
      • 4.4 邊界常數(BORDER_CONSTANT)
      • 4.5 邊界包裹(BORDER_WRAP)
      • 4.6案例
    • 5 圖像矯正(透視變換)
    • 6 圖像色彩空間轉換
      • 6.1 顏色加法
      • 6.2 顏色加權加法
      • 6.2 顏色加權加法

一、圖像預處理

4 邊緣填充

填充邊緣?我們以下圖為例。
在這里插入圖片描述

黑色區域就是需要填充的部分。

4.1 邊界復制(BORDER_REPLICATE)

邊界復制會將邊界處的像素值進行復制,然后作為邊界填充的像素值,如下圖所示,可以看到四周的像素值都一樣。

  • 添加屬性 :borderMode=cv.BORDER_REPLICATE
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,
borderMode=cv.BORDER_REPLICATE)

4.2 邊界反射(BORDER_REFLECT)

如下圖所示,會根據原圖的邊緣進行反射。

  • 添加屬性 :borderMode=cv.BORDER_REFLECT)
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_REFLECT)

4.3 邊界反射101(BORDER_REFLECT_101)

與邊界反射不同的是,不再反射邊緣的像素點,如下圖所示。

  • 添加屬性 :borderMode=cv.BORDER_REFLECT_101
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_REFLECT_101)

4.4 邊界常數(BORDER_CONSTANT)

當選擇邊界常數時,還要指定常數值是多少,默認的填充常數值為0,如下圖所示。

  • 添加屬性 :
    • borderMode=cv.BORDER_CONSTANT
    • borderValue=(0,0,255) 填充的常數值
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_CONSTANT,
borderValue=(0,0,255))

4.5 邊界包裹(BORDER_WRAP)

無限平移補充。

  • 添加屬性 :borderMode=cv.BORDER_WRAP
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_WRAP)

4.6案例

import cv2 as cv
import numpy as np
# 讀取圖片
cat = cv.imread("./images/face.png")
h, w = cat.shape[:2]
center = (w // 2, h // 2)# 旋轉中心
angle = 45# 旋轉角度
M = cv.getRotationMatrix2D(center, angle, 0.5)
# 臨近值插值
cat2 = cv.warpAffine(cat, M, (w, h), flags=cv.INTER_LANCZOS4, borderMode=cv.BORDER_REPLICATE)
# 邊界反射/邊界為軸,進行翻轉插值
cat3 = cv.warpAffine(cat, M, (w, h), flags=cv.INTER_LANCZOS4, borderMode=cv.BORDER_REFLECT)
# 邊界反射101/與上面原理一樣,只是邊界的一排不反射
cat4 = cv.warpAffine(cat, M, (w, h), flags=cv.INTER_LANCZOS4, borderMode=cv.BORDER_REFLECT_101)
# 邊界常數---要填寫填充值
cat5 = cv.warpAffine(cat, M, (w, h), flags=cv.INTER_LANCZOS4, borderMode=cv.BORDER_CONSTANT, borderValue=(255, 0, 0))
# 邊界包裹
cat6 = cv.warpAffine(cat, M, (w, h), flags=cv.INTER_LANCZOS4, borderMode=cv.BORDER_WRAP)cv.imshow("01",cat2)
cv.imshow("02",cat3)
cv.imshow("03", cat4)
cv.imshow("04", cat5)
cv.imshow("05", cat6)
cv.waitKey(0)
cv.destroyAllWindows()
  • 結果圖
    在這里插入圖片描述

5 圖像矯正(透視變換)

圖像矯正的原理是透視變換,下面來介紹一下透視變換的概念。

前面的仿射變換是把一個二維坐標系轉換到另一個二維坐標系的過程,轉換過程坐標點的相對位置和屬性不發生變換,是一個線性變換,該過程只發生旋轉和平移過程。因此,一個平行四邊形經過仿射變換后還是一個平行四邊形。

這里的透視變換是把一個三維圖像中的某個區域映射成二維圖片,并且是矩形呈現。

與仿射變換一樣,透視變換也有自己的透視變換矩陣:
[ X Y Z ] = [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] ? [ x y 1 ] \begin{array}{l l l}{{\left[\begin{array}{c}{{X}}\\{{Y}}\\{Z} \end{array}\right]=\left[\begin{array}{c c c}{{a_{11}}}&{{a_{12}}}&{{a_{13}}}\\ {{a_{21}}}&{{a_{22}}}&{{a_{23}}}\\ {{a_{31}}}&{{a_{32}}}&{{a_{33}}}\end{array}\right]*\left[\begin{array}{c}{{x}}\\{{y}}\\{{1}}\end{array}\right]}}\end{array} ?XYZ? ?= ?a11?a21?a31??a12?a22?a32??a13?a23?a33?? ?? ?xy1? ??

  • 矩陣生成方式:
  • M=getPerspectiveTransform(np1, np2)
    • np1:數據類型為float32的二維矩陣,存放透視區域的四個點坐標
    • np2:數據類型為float32的二維矩陣,存放原圖的四個點坐標

該函數會返回一個透視變換矩陣,得到透視變化矩陣之后,使用warpPerspective()函數即可進行透視變化計算,并得到新的圖像。該函

數需要提供如下參數:

  • cv2.warpPerspective(src, M, dsize, flags, borderMode)
    

src:輸入圖像。

M:透視變換矩陣。這個矩陣可以通過getPerspectiveTransform函數計算得到。

dsize:輸出圖像的大小。它可以是一個Size對象,也可以是一個二元組。

flags:插值方法的標記。

borderMode:邊界填充的模式。

  • 示例:
import cv2 as cv
import numpy as np
img = cv.imread("./images/3.png")
h, w = img.shape[:2]
# 透視變換
# 待取區域的4個坐標
zs, ys, zx, yx = (182, 133), (500, 171), (133, 264), (490, 308)
pts1 = np.float32([zs, ys, zx, yx])
# 原圖4個點  (0,0) (w,0) (0,h) (w,h)
pts2 = np.float32([[0, 0], [w, 0], [0, h], [w, h]])
# 獲取透視矩陣
M = cv.getPerspectiveTransform(pts1, pts2)
# 計算出新圖片(透視處理后的圖片)
dst = cv.warpPerspective(img, M, (w, h), flags=cv.INTER_LINEAR, borderMode=cv.BORDER_CONSTANT)
cv.imshow("dst", dst)
cv.waitKey(0)
cv.destroyAllWindows()

6 圖像色彩空間轉換

OpenCV中,圖像色彩空間轉換是一個非常基礎且重要的操作,就是將圖像從一種顏色表示形式轉換為另一種表示形式的過程。通過將圖像從一個色彩空間轉換到另一個色彩空間,可以更好地進行特定類型的圖像處理和分析任務。常見的顏色空間包括RGB、HSV、YUV等。

  • 色彩空間轉換的作用

    • 提高圖像處理效果

    • 節省計算資源

6.1 顏色加法

將兩個圖片的每個像素點進行相加。

  • 方法1:OpenCV的cv.add()函數
    • 飽和操作,例如:10+250 = 255
  • 方法2:numpy的+運算
    • 取模操作,例如:10+250 = 256 % 260 = 4

6.2 顏色加權加法

img = cv2.addWeighted(src1,alpha,src2,deta,gamma)
  • src1src2:輸入圖像。
  • alphabeta:兩張圖象權重,累加=1
  • gamma:亮度調整值。
    • gamma > 0,圖像會變亮。
    • gamma < 0,圖像會變暗。
  • 取模操作,例如:10+250 = 256 % 260 = 4

6.2 顏色加權加法

img = cv2.addWeighted(src1,alpha,src2,deta,gamma)
  • src1src2:輸入圖像。
  • alphabeta:兩張圖象權重,累加=1
  • gamma:亮度調整值。
    • gamma > 0,圖像會變亮。
    • gamma < 0,圖像會變暗。
    • gamma = 0,則沒有額外的亮度調整。

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

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

相關文章

C++ Json-Rpc框架-3項目實現(2)

一.消息分發Dispatcher實現 Dispatcher 就是“消息分發中樞”&#xff1a;根據消息類型 MType&#xff0c;把消息派發給對應的處理函數&#xff08;Handler&#xff09;執行。 初版&#xff1a; #pragma once #include "net.hpp" #include "message.hpp"n…

C++算法優化實戰:破解性能瓶頸,提升程序效率

C算法優化實戰&#xff1a;破解性能瓶頸&#xff0c;提升程序效率 在現代軟件開發中&#xff0c;算法優化是提升程序性能的關鍵手段之一。無論是在高頻交易系統、實時游戲引擎&#xff0c;還是大數據處理平臺&#xff0c;算法的高效性直接關系到整體系統的性能與響應速度。C作…

【PostgreSQL教程】PostgreSQL 特別篇之 語言接口連接PHP

博主介紹:?全網粉絲22W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

山東大學軟件學院創新項目實訓開發日志(12)之將對話記錄保存到數據庫中

在之前的功能開發中&#xff0c;已經成功將deepseekAPI接口接入到springbootvue項目中&#xff0c;所以下一步的操作是將對話和消息記錄保存到數據庫中 在之前的開發日志中提到數據庫建表&#xff0c;所以在此刻需要用到兩個表&#xff0c;conversation表和message表&#xff…

Spring-注解編程

注解基礎概念 1.什么是注解編程 指的是在類或者方法上加入特定的注解(XXX) 完成特定功能的開發 Component public classXXX{} 2.為什么要講注解編程 1.注解開發方便 代碼簡潔 開發速度大大提高 2.Spring開發潮流 Spring2.x引入注解 Spring3.x完善注解 Springboot普及 推廣注解…

Dify智能體平臺源碼二次開發筆記(5) - 多租戶的SAAS版實現(2)

目錄 前言 用戶的查詢 controller層 添加路由 service層 用戶的添加 controller層 添加路由 service層-添加用戶 service層-添加用戶和租戶關系 驗證結果 結果 前言 完成租戶添加功能后&#xff0c;下一步需要實現租戶下的用戶管理。基礎功能包括&#xff1a;查詢租…

基于若依的ruoyi-vue-plus的nbmade-boot在線表單的設計(一)架構方面的設計

希望大家一起能參與我的新開源項目nbmade-boot: 寧波智能制造低代碼實訓平臺 主要目標是類似設計jeecgboot那樣的online表單功能,因為online本身沒有開源這部分代碼,而我設計這個是完全開源的,所以希望大家支持支持,開源不容易。 1、數據庫方面設計考慮 是在原來gen_table和…

WebFlux應用中獲取x-www-form-urlencoded數據的六種方法

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

[Python基礎速成]1-Python規范與核心語法

本系列旨在快速掌握Python&#xff0c;實現能夠快速閱讀和理解 Python 代碼&#xff0c;并在可查閱語法的情況下進行 AI 學習。 本篇先了解一下Python基礎知識。 本篇內容較菜鳥教程有所刪減、方便快速構建大綱&#xff0c;且加入了PEP 8規范說明等有助于理解和編寫代碼的說明。…

農民劇團的春天與改變之路

楊天義&#xff0c;男&#xff0c;1966年9月生&#xff0c;中共黨員&#xff0c;江西省吉安市吉水縣水南農民劇團團長。 楊天義從廢品收購起家&#xff0c;憑借自身的努力和奮斗&#xff0c;自籌資金100余萬元建設了水南鎮的第一座影劇院&#xff0c;組建了江西省吉安市吉水縣…

python asyncio 的基本使用

1、引言 asyncio 是 Python 標準庫中的一個庫&#xff0c;提供了對異步 I/O 、事件循環、協程和任務等異步編程模型的支持。 asyncio 文檔 2、進程、線程、協程 線程 線程是操作系統調度的基本單位&#xff0c;同一個進程中的多個線程共享相同的內存空間。線程之間的切換由操…

Leedcode刷題 | Day30_貪心算法04

一、學習任務 452. 用最少數量的箭引爆氣球代碼隨想錄435. 無重疊區間763. 劃分字母區間 二、具體題目 1.452用最少數量的箭引爆氣球452. 用最少數量的箭引爆氣球 - 力扣&#xff08;LeetCode&#xff09; 在二維空間中有許多球形的氣球。對于每個氣球&#xff0c;提供的輸…

Ant Design Vue 表格復雜數據合并單元格

Ant Design Vue 表格復雜數據合并單元格 官方合并效果 官方示例 表頭只支持列合并&#xff0c;使用 column 里的 colSpan 進行設置。 表格支持行/列合并&#xff0c;使用 render 里的單元格屬性 colSpan 或者 rowSpan 設值為 0 時&#xff0c;設置的表格不會渲染。 <temp…

C++ 標準庫中的 <algorithm> 頭文件算法總結

C 常用 <algorithm> 算法概覽 C 標準庫中的 <algorithm> 頭文件提供了大量有用的算法&#xff0c;主要用于操作容器&#xff08;如 vector, list, array 等&#xff09;。這些算法通常通過迭代器來操作容器元素。 1. 非修改序列操作 std::all_of, std::any_of, s…

程序化廣告行業(84/89):4A廣告代理公司與行業資質解讀

程序化廣告行業&#xff08;84/89&#xff09;&#xff1a;4A廣告代理公司與行業資質解讀 大家好&#xff01;在探索程序化廣告行業的道路上&#xff0c;每一次知識的分享都是我們共同進步的階梯。一直以來&#xff0c;我都希望能和大家攜手前行&#xff0c;深入了解這個充滿機…

deepin使用autokey添加微信快捷鍵一鍵顯隱ctrl+alt+w

打開deepin商店&#xff0c;搜索快捷鍵&#xff0c;找到autokey 快捷鍵管理&#xff0c;點擊安裝 點擊右鍵新建文件夾 點擊右鍵新建腳本 打開腳本并添加以下內容 import subprocess import time# ------------------ 配置項 ------------------ WM_CLASS "wechat…

文件內容課堂總結

Spark SQL是Spark用于結構化數據處理的模塊&#xff0c;前身是Shark。Shark基于Hive開發&#xff0c;雖提升了SQL-on-Hadoop效率&#xff0c;但對Hive依賴過多。2014年6月1日Shark項目停止開發&#xff0c;團隊將資源投入Spark SQL項目。Spark SQL具有諸多優點&#xff0c;如擺…

Zotero PDF Translate 翻譯插件使用OpenAI API配置教程

PDF Translate&#xff1a;提升 Zotero 內置 PDF 閱讀器的翻譯功能 “PDF Translate” 是一款為 Zotero 設計的插件&#xff0c;旨在方便用戶在 Zotero 內置的 PDF 閱讀器中進行劃詞或段落翻譯&#xff0c;輔助閱讀外文文獻。 一、 安裝插件 下載插件&#xff1a; 訪問 PDF T…

火山引擎旗下的產品

用戶問的是火山引擎旗下的產品&#xff0c;我需要詳細列出各個類別下的產品。首先&#xff0c;我得確認火山引擎有哪些主要業務領域&#xff0c;比如云計算、大數據、人工智能這些。然后&#xff0c;每個領域下具體有哪些產品呢&#xff1f;比如云計算方面可能有云服務器、容器…

C/C++程序中實現Python綁定多種技術路線

在C/C程序中實現Python綁定有多種技術路線&#xff0c;選擇合適的方法取決于項目需求、性能要求和開發效率。以下是常見的幾種方案&#xff0c;按易用性排序&#xff1a; 1. PyBind11&#xff08;推薦首選&#xff09; 特點&#xff1a;現代C庫&#xff0c;語法簡潔&#xff0…