OpenCV 圖像像素的邏輯操作


一、知識點
1、圖像像素的邏輯操作,指的是位操作bitwise,與、或、非、異或等。

2、位操作簡介:
?

  位1 ? ? 位2 ? ? 與and ? ? 或or ? ? 異或xor0 ? ? ? 0 ? ? ? ?0 ? ? ? ?0 ? ? ? ? 00 ? ? ? 1 ? ? ? ?0 ? ? ? ?1 ? ? ? ? 11 ? ? ? 0 ? ? ? ?0 ? ? ? ?1 ? ? ? ? 11 ? ? ? 1 ? ? ? ?1 ? ? ? ?1 ? ? ? ? 0


??
3、void rectangle(InputOutputArray img, Rect rec, const Scalar & color, int thickness = 1, int lineType = LINE_8, int shift = 0);
? (1)、在圖像上繪制或填充一個矩形。
? (2)、參數說明:
? ? ? img: 輸入、輸出參數,表示要繪制或填充矩形的圖像。
?? ? ?rec: 定義了矩形左上角位置、寬、高。
?? ? ?color: 矩形線框或填充的顏色。
?? ? ?thickness: >0時表示矩形線框粗細,<0時表示填充矩形。
?? ? ?lineType: 線條的類型,如8連通、4連通。
?? ? ?shift: 點坐標中的小數位數。
?? ? ?
4、void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
? (1)、執行兩個數組的位與操作。
? (2)、參數說明:
? ? ? src1: 第一個輸入數組。
?? ? ?src2: 第二個輸入數組。 src1和src2大小和類型得相同。
?? ? ?dst: 輸出數組,src1 & src2的結果數組。
?? ? ?mask: 掩碼數組,可選。 這個數組是8位單通道,且大小和輸入數組相同,只有掩碼中的非零元素對應的輸入數組元素才會進行位與操作。 未指定掩碼,則對整個輸入數組進行位與操作。

5、void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
? (1)、執行兩個數組的位或操作。
? (2)、參數說明:
? ? ? src1: 第一個輸入數組。
?? ? ?src2: 第二個輸入數組。 src1和src2大小和類型得相同。
?? ? ?dst: 輸出數組,src1 | src2的結果數組。
?? ? ?mask: 掩碼數組,可選。 這個數組是8位單通道,且大小和輸入數組相同,只有掩碼中的非零元素對應的輸入數組元素才會進行位或操作。 未指定掩碼,則對整個輸入數組進行位或操作。

6、void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
? (1)、執行兩個數組的異或操作。
? (2)、參數說明:
? ? ? src1: 第一個輸入數組。
?? ? ?src2: 第二個輸入數組。 src1和src2大小和類型得相同。
?? ? ?dst: 輸出數組,src1 ^ src2的結果數組。
?? ? ?mask: 掩碼數組,可選。 這個數組是8位單通道,且大小和輸入數組相同,只有掩碼中的非零元素對應的輸入數組元素才會進行異或操作。 未指定掩碼,則對整個輸入數組進行異或操作。

7、void bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());
? (1)、取反數組的每一位。
? (2)、參數說明:
? ? ? src: 輸入數組。
?? ? ?dst: 輸出數組,!src的結果數組。
?? ? ?mask: 掩碼數組,可選。 這個數組是8位單通道,且大小和輸入數組相同,只有掩碼中的非零元素對應的輸入數組元素才會進行取反操作。 未指定掩碼,則對整個輸入數組進行取反操作。

二、示例代碼:

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::Mat m1 = cv::Mat::zeros(256, 256, CV_8UC3);cv::Mat m2 = cv::Mat::zeros(256, 256, CV_8UC3);cv::rectangle(m1, cv::Rect(100, 100, 80, 80), cv::Scalar(255, 255, 0), -1, cv::LINE_8, 0);cv::rectangle(m2, cv::Rect(150, 150, 80, 80), cv::Scalar(0, 255, 255), -1, cv::LINE_8, 0);cv::imshow("m1", m1);cv::imshow("m2", m2);//兩個矩形相交部分是(150, 150)到(180, 180)之間。//兩個矩形相交部分經過與后, 結果為BGR(0, 255, 0); 圖像其它像素經過與后,結果為BGR(0, 0, 0)。cv::Mat dst1;cv::bitwise_and(m1, m2, dst1);cv::imshow("bitwise_and", dst1);//兩個矩形相交部分經過或后,結果為BGR(255, 255, 255); 兩個矩形不相交部分原先是什么顏色, 或后結果仍為什么顏色; 圖像其它像素經過或后,結果為BGR(0, 0, 0)。cv::Mat dst2;cv::bitwise_or(m1, m2, dst2);cv::imshow("bitwise_or", dst2);//兩個矩形相交部分經過異或后,結果為BGR(255, 0, 255); 兩個矩形不相交部分原先是什么顏色, 或后結果仍為什么顏色; 圖像其它像素經過或后,結果為BGR(0, 0, 0)。cv::Mat dst3;cv::bitwise_xor(m1, m2, dst3);cv::imshow("bitwise_xor", dst3);//m1矩形經過非后,結果為BGR(0, 0, 255); 圖像其它像素經過非后,結果為BGR(255, 255, 255)。cv::Mat dst4;cv::bitwise_not(m1, dst4);cv::imshow("bitwise_not", dst4);cv::waitKey(0);return 0;
}

運行結果:

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

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

相關文章

【AAOS】【源碼分析】用戶管理(二)-- 整體架構

整體介紹 Android多用戶功能作為 Android Automotive 的重要組成部分,為不同駕駛員和乘客提供了一個更加定制化、隱私保護的使用環境。Android 多用戶的存在,它可以讓多個用戶使用同一臺設備,同時保持彼此的數據、應用和設置分隔開來。 各用戶類型的權限 能力SystemAdminS…

Redis最佳實踐——電商應用的性能監控與告警體系設計詳解

Redis 在電商應用的性能監控與告警體系設計 一、原子級監控指標深度拆解 1. 內存維度監控 核心指標&#xff1a; # 實時內存組成分析&#xff08;單位字節&#xff09; used_memory: 物理內存總量 used_memory_dataset: 數據集占用量 used_memory_overhead: 管理開銷內存 us…

多模態大語言模型arxiv論文略讀(109)

Math-PUMA: Progressive Upward Multimodal Alignment to Enhance Mathematical Reasoning ?? 論文標題&#xff1a;Math-PUMA: Progressive Upward Multimodal Alignment to Enhance Mathematical Reasoning ?? 論文作者&#xff1a;Wenwen Zhuang, Xin Huang, Xiantao Z…

web3-以太坊智能合約基礎(理解智能合約Solidity)

以太坊智能合約基礎&#xff08;理解智能合約/Solidity&#xff09; 無需編程經驗&#xff0c;也可以幫助你了解Solidity獨特的部分&#xff1b;如果本身就有相應的編程經驗如java&#xff0c;python等那么學起來也會非常的輕松 一、Solidity和EVM字節碼 實際上以太坊鏈上儲存…

D2-基于本地Ollama模型的多輪問答系統

本程序是一個基于 Gradio 和 Ollama API 構建的支持多輪對話的寫作助手。相較于上一版本&#xff0c;本版本新增了對話歷史記錄、Token 計數、參數調節和清空對話功能&#xff0c;顯著提升了用戶體驗和交互靈活性。 程序通過抽象基類 LLMAgent 實現模塊化設計&#xff0c;當前…

傳統業務對接AI-AI編程框架-Rasa的業務應用實戰(2)--選定Python環境 安裝rasa并初始化工程

此篇接續上一篇 傳統業務對接AI-AI編程框架-Rasa的業務應用實戰&#xff08;1&#xff09;--項目背景即學習初衷 1、Python 環境版本的選擇 我主機上默認的Python環境是3.12.3 &#xff08;我喜歡保持使用最新版本的工具或框架&#xff0c;當初裝python時最新的穩定版本就是…

Ubuntu22.04安裝MinkowskiEngine

MinkowskiEngine簡介 Minkowski引擎是一個用于稀疏張量的自動微分庫。它支持所有標準神經網絡層&#xff0c;例如對稀疏張量的卷積、池化和廣播操作。 MinkowskiEngine安裝 官方源碼鏈接&#xff1a;GitHub - NVIDIA/MinkowskiEngine: Minkowski Engine is an auto-diff neu…

高等數學基礎(矩陣基本操作轉置和逆矩陣)

矩陣是否相等 若 A A A和 B B B為同型矩陣且對應位置的各個元素相同, 則稱矩陣 A A A和 B B B相等 在Numpy中, 可以根據np.allclose()來判斷 import numpy as npA np.random.rand(4, 4) # 生成一個隨機 n x n 矩陣B A A.Tprint("矩陣是否相等&#xff1a;", np…

網絡爬蟲一課一得

網頁爬蟲&#xff08;Web Crawler&#xff09;是一種自動化程序&#xff0c;通過模擬人類瀏覽行為&#xff0c;從互聯網上抓取、解析和存儲網頁數據。其核心作用是高效獲取并結構化網絡信息&#xff0c;為后續分析和應用提供數據基礎。以下是其詳細作用和用途方向&#xff1a; …

MATLAB實現井字棋

一、智能決策系統與博弈游戲概述 &#xff08;一&#xff09;智能決策系統核心概念 智能決策系統&#xff08;Intelligent Decision System, IDS&#xff09;是通過數據驅動和算法模型模擬人類決策過程的計算機系統&#xff0c;核心目標是在復雜環境中自動生成最優策略&#…

解決el-select選擇框右側下拉箭頭遮擋文字問題

如圖所示&#xff1a; el-select長度較短的時候&#xff0c;選擇框右側下拉箭頭會遮擋選中的數據 選中數據被遮擋 解決辦法&#xff1a; 組件如下&#xff1a; <td class"fmtd" :colspan"col.ptproCupNum" v-for"col in row" :key"…

【Linux】pthread多線程同步

參考文章&#xff1a;https://blog.csdn.net/Alkaid2000/article/details/128121066 一、線程同步 線程的主要優勢在于&#xff0c;能夠通過全局變量來共享信息。不過&#xff0c;這種便攜的共享是有代價的&#xff1b;必須確保多個線程不會同時修改同一變量&#xff0c;或者某…

Spring框架學習day7--SpringWeb學習(概念與搭建配置)

SpringWeb1.SpringWeb特點2.SpringWeb運行流程3.SpringWeb組件4.搭建項目結構圖&#xff1a;4.1導入jar包4.2在Web.xml配置**4.2.1配置統一攔截分發器 DispatcherServlet**4.2.2開啟SpringWeb注解&#xff08;spring.xml&#xff09; 5.處理類的搭建6.SpringWeb請求流程(自己理…

業務到解決方案構想

解決方案構想的核心理解 解決方案構想是連接業務需求與技術實現的關鍵橋梁&#xff0c;從您描述的內容和我的理解&#xff0c;這個階段的核心點包括&#xff1a; 核心要點解讀 轉化視角&#xff1a;將業務視角的需求轉變為解決方案視角 業務能力探索階段識別了"做什么&q…

jvm學習第1day jvm簡介,棧溢出、堆溢出

jvm學習第1day jvm簡介&#xff0c;棧溢出、堆溢出 jvm簡介棧線程安全棧溢出線程運行診斷堆堆溢出 方法區方法區內存溢出常量池和運行時常量池 jvm簡介 jvm 是編譯后的字節碼文件運行的環境&#xff0c; 因此各個平臺有了jvm可以運行java.class文件&#xff0c;這是Java跨平臺…

關于神經網絡中的激活函數

這篇博客主要介紹一下神經網絡中的激活函數以及為什么要存在激活函數。 首先&#xff0c;我先做一個簡單的類比&#xff1a;激活函數的作用就像給神經網絡里的 “數字信號” 加了一個 “智能閥門”&#xff0c;讓機器能學會像人類一樣思考復雜問題。 沒有激活i函數的神經網絡…

免費無限使用GPT Plus、Claude Pro、Grok Super、Deepseek滿血版

滲透智能-ShirtAI&#xff0c;可以免費無限使用GPT Plus、Claude Pro、Grok Super、Deepseek滿血版、除此之外還能免費使用AI搜索、Gemini AI、AI照片修復、AI橡皮擦、AI去背景、AI智能摳圖、AI證件照、OCR識別、在線思維導圖、在線繪圖工具、PDF工具箱、PDF翻譯。 傳送入口&a…

阿里云 Linux 搭建郵件系統全流程及常見問題解決

阿里云 Linux 搭建 [conkl.com]郵件系統全流程及常見問題解決 目錄 阿里云 Linux 搭建 [conkl.com]郵件系統全流程及常見問題解決一、前期準備&#xff08;關鍵配置需重點檢查&#xff09;1.1 服務器與域名準備1.2 系統初始化&#xff08;必做操作&#xff09; 二、核心組件安裝…

python版若依框架開發:項目結構解析

python版若依框架開發 從0起步&#xff0c;揚帆起航。 python版若依部署代碼生成指南&#xff0c;迅速落地CURD&#xff01;項目結構解析 文章目錄 python版若依框架開發前端后端 前端 后端

RabbitMQ 的異步化、解耦和流量削峰三大核心機制

RabbitMQ 的異步化、解耦和流量削峰三大核心機制 RabbitMQ 是解決數據庫高并發問題的利器&#xff0c;通過異步化、解耦和流量削峰三大核心機制保護數據庫。下面從設計思想到具體實現&#xff0c;深入剖析 RabbitMQ 應對高并發的完整方案&#xff1a; 一、數據庫高并發核心痛點…