opencv入門(5)圖像像素的讀寫操作和算術運算

文章目錄

  • 1 圖像遍歷與修改
    • 1.1 使用數組
    • 1.2 使用指針
  • 2 圖像的算術運算
  • 2.1 一般算術操作
  • 2.2 算術API


1 圖像遍歷與修改

C++中支持 數組遍歷 和 指針方式遍歷

1.1 使用數組

訪問使用 image.at(row,col) 進行訪問
如果是單通道灰度圖,就使用image.at進行讀取
如果是三通道彩色圖,就使用Image.at進行讀取單個像素,通過 Image.at [0], Image.at[1], Image.at[2]讀取每個通道的數據

void QuickDemo::pixel_visit_demo(Mat &image)
{int w = image.cols;int h = image.rows;int dimis = image.channels();for (int row = 0; row < h; row++){for (int col = 0; col < w; col++){if (dimis == 1){// 灰色圖像 打印像素 幾行幾列的那個像素點int pv = image.at<uchar>(row, col);// 修改像素點image.at<uchar>(row, col) = 255 - pv;}if (dimis == 3){// 彩色圖像 專門獲取三通道的存儲Vec3b bgr = image.at<Vec3b>(row, col);image.at<Vec3b>(row, col)[0] = 255 - bgr[0];image.at<Vec3b>(row, col)[1] = 255 - bgr[1];image.at<Vec3b>(row, col)[2] = 255 - bgr[2];}}}imshow("像素讀寫演示", image);}

這邊就是對三通道進行一個取反
在這里插入圖片描述
在這里插入圖片描述

1.2 使用指針

使用image.ptr 進行遍歷

for (int row = 0; row < h; row++){uchar* current_row = image.ptr<uchar>(row);for (int col = 0; col < w; col++){if (dimis == 1){// 灰色圖像 打印像素 幾行幾列的那個像素點int pv = *current_row;// 修改像素點*current_row++ = 255 - pv;}if (dimis == 3){// 彩色圖像 專門獲取三通道的存儲*current_row++ = 255 - *current_row;*current_row++ = 255 - *current_row;*current_row++ = 255 - *current_row;}}}

2 圖像的算術運算

2.1 一般算術操作

Mat dst;dst = image + Scalar(50, 50, 50);imshow("加法測試");

在這里插入圖片描述
同樣可以使用減法,除法

Mat dst;dst = image - Scalar(50, 50, 50);dst = image / Scalar(2, 2, 2);imshow("加法測試");

進行乘法時會報錯,這時候需要特殊操作
使用multiply 進行乘法操作

	Mat dst;//dst = image + Scalar(50, 50, 50);Mat m = Mat::zeros(image.size(), image.type());multiply(image, m, dst);imshow("加法測試");

會進行截斷操作,超過255會變成255

為避免加法也會出現超過255的操作,使用C++的數據類型轉換,
saturate_cast(a,b);

Mat dst = Mat::zeros(image.size(), image.type());//dst = image + Scalar(50, 50, 50);Mat m = Mat::zeros(image.size(), image.type());/*multiply(image, m, dst);imshow("加法測試");*/m = Scalar(50, 50, 50);int w = image.cols;int h = image.rows;int dimis = image.channels();for (int row = 0; row < h; row++){for (int col = 0; col < w; col++){if (dimis == 1){// 灰色圖像 打印像素 幾行幾列的那個像素點int pv = image.at<uchar>(row, col);// 修改像素點image.at<uchar>(row, col) = 255 - pv;}if (dimis == 3){// 彩色圖像 專門獲取三通道的存儲Vec3b p1 = image.at<Vec3b>(row, col);Vec3b p2 = m.at<Vec3b>(row, col);image.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(p1[0] + p2[0]);image.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(p1[1] + p2[1]);image.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(p1[2] + p2[2]);}}}

2.2 算術API

上節已經有乘法的API
multiply(第一個mat,第二個mat, 輸出結果);
加法
add(image, m, dst);
減法
subtract(image , m, dst)
除法
divide(image, m, dst)

multiply(image, m, dst);
add(image, m, dst);
subtract(image, m, dst);
divide(image, m, dst);

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

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

相關文章

Stable Diffusion入門-ControlNet 深入理解-第三課:結構類模型大揭秘——深度、分割與法線貼圖

大家好,歡迎回到Stable Diffusion入門-ControlNet 深入理解系列的第三課! 在上一課中,我們深入探討了 ControlNet 文件的命名規則,以及線條類 ControlNet模型的控制方法。如果你還沒有看過第二篇,趕緊點這里補課:Stable Diffusion入門-ControlNet 深入理解 第二課:Contr…

噴油嘴深凹槽內輪廓測量的方法探究 —— 激光頻率梳 3D 輪廓測量

引言 噴油嘴作為燃油噴射系統核心部件&#xff0c;其深凹槽內輪廓精度直接影響燃油霧化效果與發動機排放性能。噴油嘴深凹槽具有深徑比大&#xff08;可達 30:1&#xff09;、孔徑小&#xff08;φ0.5 - 2mm&#xff09;、表面質量要求高&#xff08;Ra≤0.2μm&#xff09;等…

上證ETF50期權交易規則一文詳解

50ETF期權&#xff0c;首先這是期權交易&#xff0c;所以50ETF期權有期權交易的所有特征&#xff0c;其次&#xff0c;50ETF期權的標的對象是上證50&#xff0c;所以50ETF&#xff08;認購看漲&#xff09;期權的走勢和上證50的走勢是一樣的。 行權時間&#xff1a; 在行權日當…

Oracle獲取執行計劃之10046 技術詳解

Oracle 的 10046 事件是性能調優中最常用的工具之一&#xff0c;通過跟蹤會話的 SQL 執行細節&#xff0c;生成包含執行計劃、等待事件、綁定變量等信息的跟蹤文件&#xff0c;幫助定位性能瓶頸。以下是技術詳解&#xff1a; 一、10046 事件基礎 10046 是 Oracle 內部事件&…

Linux 日志監控工具對比:從 syslog 到 ELK 實戰指南

更多云服務器知識&#xff0c;盡在hostol.com 你有沒有被 Linux 上滿屏飛滾的日志整崩潰過&#xff1f;看著 /var/log 目錄越來越肥&#xff0c;關鍵日志像大海撈針一樣藏在里面&#xff0c;每次出故障就像拆盲盒&#xff0c;賭你能不能第一眼看出問題。 日志系統&#xff0c…

本地服務器部署后外網怎么訪問不了?內網地址映射互聯網上無法連接問題的排查

我的網站部署搭建在本地服務器上的&#xff0c;在內網可以正常訪問&#xff0c;但是外網無法訪問&#xff0c;該怎么排查&#xff1f;局域網內部經過路由器的&#xff0c;有設置了虛擬服務器轉發規則&#xff0c;在互聯網公網上還是無法訪問服務器怎么辦&#xff1f;相信很多人…

如何免費正確安裝微軟的office全家桶

記錄一下如何正確安裝微軟的office全家桶 找到安裝包傻瓜式安裝 找到安裝包 安裝包在附件&#xff0c;大家可以自行進行下載 傻瓜式安裝 操作一目了然&#xff0c;點你需要的就行了

論文閱讀:BLIPv1 2022.2

文章目錄 一、研究背景與問題現有方法的局限性研究目標 二、核心方法與創新點多模態編碼器 - 解碼器混合架構&#xff08;MED&#xff09;標題生成與過濾&#xff08;CapFilt&#xff09;數據自舉方法 三、實驗與結果數據集與訓練配置關鍵實驗發現與 state-of-the-art 方法的對…

630,百度文心大模型4.5系列開源!真香

2025年被普遍認為是AI Agent商業化的關鍵之年&#xff0c;而大模型正是Agent能力的核心支撐。 當開發成本大幅降低&#xff0c;我們很可能看到各種垂直領域的Agent應用如雨后春筍般涌現。 技術普惠的現實意義對于廣大AI創業者和開發者來說&#xff0c;這無疑是個好消息。 之…

數據結構:遞歸:斐波那契數列(Fibonacci Sequence)

目錄 什么是斐波那契數列&#xff1f; 用遞歸推導Fibonacci 復雜度分析 用迭代推導Fibonacci 復雜度分析 遞歸優化&#xff1a;記憶化遞歸&#xff08;Memoized Recursion&#xff09; 復雜度分析 什么是斐波那契數列&#xff1f; 斐波那契數列&#xff08;Fibonacci Seq…

ArcGIS Pro利用擦除工具,矢量要素消除另一矢量部分區域

選擇“System Toolboxes”→“Analysis Tools.tbx”→“Overlay”→“Erase&#xff08;擦除&#xff09;”。 原始 擦除后

Linux: network: 性能 pause

最近看到一個問題,是關于網卡的throughput的性能問題,后來在ethtool-S里看到有pause的counter,這個也是網絡性能問題的一個分析方向。算是學到了新的知識點。 $ grep -i -e 2025- -e pause ethtool*ens2f1np1 | grep -v -e ": 0\$" | headtail 4====

目標檢測系列(五)已標注數據集(yolo格式)導入labelstudio繼續標注

目錄 1、labelstudio安裝 2、yolo(txt)轉json 3、COCO轉yolo(僅針對coco格式標注信息) 4、設置環境變量并啟動labelstudio 5、進入label studio創建工程并設置任務標簽 6、安裝http-server并啟動文件映射服務 7、進入label studio導入json文件即可 1、labelstudio安裝 …

pytorch底層原理學習--Libtorch

libtorch libtorch 是 PyTorch 的 C 實現版本&#xff0c;可以認為所有的pytorch底層都是由c實現&#xff0c;而pytorch的所有C實現就叫libtorch&#xff0c;也就是我們在pytorch官網getstart頁面下載的cpytorch版本。我們用python寫的pytorch神經網絡代碼都會通過pybind11將p…

TCP 三次握手協商 MSS 前,如何確定 MSS 值(附 Linux 內核源碼)

文章目錄 一、SYN總結影響 SYN MSS 的因素 二、SYNACK總結影響 SYNACK MSS 的因素 結合 Linux 內核源碼 一、SYN 總結影響 SYN MSS 的因素 套接字選項 TCP_MAXSEG路由選項 advmss出口 MTU 減去 40(TCP 和 IP 的固定首部大小)IPV4_MAX_PMTU - 40(同上) 二、SYNACK 總結影響 SY…

掃描電子顯微鏡(SEM)夏令營面試基礎題及答案

第二期表征問題SEM&#xff0c;后續會陸續更新其他表征 SEM和XRD一樣&#xff0c;都是表征里面很常見的手段&#xff0c;基本上看論文這兩個都是必不可少的 對于這部分內容&#xff0c;理解記憶&#xff1e;死記硬背&#xff0c;到時會問起來回答個大概就行&#xff0c; 像上…

Leetcode力扣解題記錄--第49題(map)

題目鏈接&#xff1a;49. 字母異位詞分組 - 力扣&#xff08;LeetCode&#xff09; 題目描述 給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 示例 1: 輸入: strs ["eat", "tea", "tan", &quo…

AI賦能智慧餐飲:Spring Boot+大模型實戰指南

? 餐飲行業三大痛點 高峰期點餐擁堵&#xff1a;300人餐廳&#xff0c;15個服務員仍排長隊 后廚浪費嚴重&#xff1a;食材損耗率高達25%&#xff0c;成本失控 顧客體驗同質化&#xff1a;復購率不足30% &#x1f680; 智慧餐飲解決方案架構 &#x1f525; 核心模塊代碼實現…

用鴻蒙打造真正的跨設備數據庫:從零實現分布式存儲

網羅開發 &#xff08;小紅書、快手、視頻號同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

【Docker基礎】Docker數據卷:數據卷的作用與使用場景

目錄 1 Docker數據卷概述 1.1 什么是數據卷 1.2 數據卷的核心特性 3 數據卷與綁定掛載的對比 2.1 技術對比 2.2 選擇建議 3 數據卷的核心作用 3.1 數據持久化 3.2 數據共享 3.3 備份與遷移 4 數據卷使用場景詳解 4.1 數據庫應用 4.2 日志集中管理 5 數據卷操作全…