首页 > 其他分享 >两幅图像间的逻辑操作,与、或、非、异或:bitwise_and( ) bitwise_or( ) bitwise_not( ) bitwise_xor( )

两幅图像间的逻辑操作,与、或、非、异或:bitwise_and( ) bitwise_or( ) bitwise_not( ) bitwise_xor( )

时间:2024-08-21 16:51:53浏览次数:7  
标签:xor name img int bitwise 异或 type size

学OpenCV

===============================================================================================

这里额外看了下使用mask的情形

 

===============================================================================================

代码

  1 #include <iostream>
  2 
  3 #include <opencv2/opencv.hpp>
  4 #include <opencv2/core/utils/logger.hpp>
  5 
  6 
  7 template <typename T>
  8 T* MakeSerialArr(int datasize)
  9 {
 10     T* ptr = new T[datasize];
 11     for (int i = 0; i < datasize; i++)
 12     {
 13         ptr[i] = (T)i;
 14     }
 15     return ptr;
 16 }
 17 
 18 #define SerialArr_Heap(name,type,size) \
 19     type* name = new type[size];\
 20     for (int i = 0; i < size; i++) \
 21     {\
 22         name[i] = (type)i;\
 23     }
 24 
 25 #define SerialArr_Stack(name,type,size) \
 26     type name[size]={};\
 27     for (int i = 0; i < size; i++) \
 28     {\
 29         name[i] = (type)i;\
 30     }
 31 
 32 
 33 void Test1()
 34 {
 35     cv::Mat img;
 36     img = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\lena.png)");
 37     if (img.empty())
 38     {
 39         std::cout << "请确认图像文件名是否正确" << std::endl;
 40         return ;
 41     }
 42 
 43     cv::imshow("img", img);
 44 
 45     cv::Mat img0 = cv::Mat::zeros(200, 200, CV_8UC1);
 46     cv::Rect rect0(50, 50, 100, 100);
 47     img0(rect0) = cv::Scalar(UCHAR_MAX);
 48     cv::imshow("img0", img0);
 49 
 50     cv::Mat img1 = cv::Mat::zeros(200, 200, CV_8UC1);
 51     cv::Rect rect1(100, 100, 100, 100);
 52     img1(rect1) = cv::Scalar(UCHAR_MAX);
 53     cv::imshow("img1", img1);
 54 
 55     //logical operation
 56     cv::Mat mmand, mmor, mmxor, mnot, imgnot;
 57     cv::bitwise_and(img0, img1, mmand);
 58     cv::bitwise_or(img0, img1, mmor);
 59     cv::bitwise_xor(img0, img1, mmxor);
 60     cv::bitwise_not(img0, mnot);
 61     cv::bitwise_not(img, imgnot);
 62 
 63     cv::imshow("and", mmand);
 64     cv::imshow("or", mmor);
 65     cv::imshow("xor", mmxor);
 66     cv::imshow("not", mnot);
 67     cv::imshow("not", imgnot);
 68 }
 69 
 70 void Test2()
 71 {
 72     cv::Mat img;
 73     img = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\lena.png)");
 74     if (img.empty())
 75     {
 76         std::cout << "请确认图像文件名是否正确" << std::endl;
 77         return;
 78     }
 79 
 80     //cv::imshow("img", img);
 81 
 82     cv::Mat img0 = cv::Mat::zeros(200, 200, CV_8UC1);
 83     cv::Rect rect0(50, 50, 100, 100);
 84     img0(rect0) = cv::Scalar(UCHAR_MAX);
 85     //cv::imshow("img0", img0);
 86 
 87     cv::Mat img1 = cv::Mat::zeros(200, 200, CV_8UC1);
 88     cv::Rect rect1(100, 100, 100, 100);
 89     img1(rect1) = cv::Scalar(UCHAR_MAX);
 90     //cv::imshow("img1", img1);
 91 
 92     cv::Mat mask = cv::Mat::zeros(200, 200, CV_8UC1);//mask
 93     cv::Rect rect(100,0,100,200);
 94     mask(rect) = cv::Scalar(UCHAR_MAX);
 95     cv::imshow("mask", mask);
 96 
 97     cv::Mat mask2 = cv::Mat::zeros(512, 512, CV_8UC1);//mask
 98     cv::Rect rect2(256, 0, 256, 512);
 99     mask2(rect2) = cv::Scalar(UCHAR_MAX);
100     cv::imshow("mask2", mask2);
101 
102     //logical operation
103     cv::Mat mmand, mmor, mmxor, mnot, imgnot;
104     cv::bitwise_and(img0, img1, mmand, mask);
105     cv::bitwise_or(img0, img1, mmor, mask);
106     cv::bitwise_xor(img0, img1, mmxor, mask);
107     cv::bitwise_not(img0, mnot, mask);
108     cv::bitwise_not(img, imgnot, mask2);
109 
110     cv::imshow("2and", mmand);
111     cv::imshow("2or", mmor);
112     cv::imshow("2xor", mmxor);
113     cv::imshow("2not", mnot);
114     cv::imshow("2not", imgnot);
115 }
116 
117 int main()
118 {
119     cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR);
120     
121     Test1();
122     Test2();
123 
124     cv::waitKey(0);
125 
126     return 0;
127 }

 

效果

 

标签:xor,name,img,int,bitwise,异或,type,size
From: https://www.cnblogs.com/wlsandwho/p/18371993

相关文章

  • 牛客周赛 Round 56 C题异或故事
    链接:https://ac.nowcoder.com/acm/contest/88392/C这题考察的知识点是异或。关于异或,我们应该掌握以下知识点:1.两个相同的数异或的结果为0;2.0和任意一个非零的数异或的结果都是那个非零实数本身;3.a^b^c=a^(b^c)=(a^b)^c;4.d=a^b^c-->a=d^b^c;5.a^b^a=b;6.a^b=b^a.7.......
  • [GUET-CTF2019]虚假的压缩包1附送RSA解密&CRC破解png宽高&异或python脚本
    解压得到下图两个zip文件,虚假的压缩包、真实的压缩包使用010editor打开,发现是伪加密,把09改为00即可打开打开以后,发现是是一个rsa解密题上python脚本importgmpy2deffind_pq(n):forpinrange(2,int(n**0.5)+1):ifn%p==0:q=......
  • QxOrm环境搭建以及接口编写
    1.常用ORM库比较2.QxOrm库编译集成2.1.下载地址https://www.qxorm.com/qxorm_en/home.html2.2.编译2.2.1.源码下载2.2.2.cmake编译2.2.3.打开QxOrm工程编译VisualStudio2015(v140)版本库2.2.4.编译好的库生成目录3.注册3.1.注册类其中传入的模......
  • ABC366 G - XOR Neighbors 题解
    发现题目实质上就是让你构造一组\(a_{1,2,\dots,n}\),有一些限制,要求一些\(a\)异或起来是\(0\)。看到\(n\le60\),果断列异或方程组,用异或高斯消元。具体地,有\(n\)个方程组,\(a_{i,j}\)表示第\(i\)个方程中\(j\)的系数。对于每一个变量\(i\),要把\(j>i\)的方程中的第......
  • D - Xor Sum 2
    原题链接题解异或就是不进位的加法,所以区间内,每一位最多只有一个一暴力方法:遍历每一位区间,查看异或和加和\(O(n^3)\)前缀和优化:找每个右端点合法的左端点\(O(n^2)\)利用性质优化:由于最多只有一个1,所以这样的左端点不会随着右端点的递增而递增\(O(n)\)code#include<bi......
  • ABC201E Xor Distances 题解
    ABC201EXorDistances题解题目大意给定一个带权树,求树上每两点的简单路径上的边权的异或和的和。形式化的,定义\(dis(i,j)\)为\(i\)到\(j\)的简单路径上的边权的异或和,求\(\large\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n\text{dis}(i,j)\)。Solve令\(\largef(u)=......
  • [AGC052B] Tree Edges XOR
    好题,可以直接作为套路记录一下。[AGC052B]TreeEdgesXOR题目大意:给你一棵树,有奇数个点,每个边有边权\(w_i\)。每次你可以选出一条边,将和这条边的所有相邻的边都异或这条边的边权,问你能否得到最终状态(操作次数不定)。思路:首先,上来会发现每次操作影响的边十分多,肯定无法直接维......
  • [lnsyoj2246/luoguCF979D]Kuro and GCD and XOR and SUM
    题意给定集合\(S\),初始为空,进行\(q\)次修改或查询操作:修改操作将\(x\)加入集合;查询操作给定\(x,s,k\),要求找到满足\[\max_{u\inS,u+x\les,k|\gcd(u,x)}\{u\oplusx\}\]的最小的\(u\)。sol集合、异或、可查可改,可以自然地想到0/1-Trie。我们假设\(k=1\),此时不需......
  • [十二省联考 2019] 异或粽子
    如果这道题目会可持久化trie的话,是可以用“超级钢琴”这一道题目的思路去做的如果不行的话,考虑用trie,然后这篇题解关于trie的常用trick的综合可以记住讲一下怎么查找第\(k\)大,不要用二分了,直接把\(sum_r\)放在trie树上查找。trie树每个点记录一下这个点的子树有多少个位置(这个维......
  • 【STM32】IO口取反 | 寄存器方式 | 异或运算符 | 原理
    目录STM32IO口取反|寄存器方式|异或运算符|原理1.引言2.GPIO基础知识2.1GPIO概述2.2STM32的GPIO架构2.3GPIO寄存器简介3.GPIO引脚取反原理3.1寄存器操作实现取反3.2异或运算符的应用4.示例代码4.1基础示例:LED闪烁4.2应用实例:继电器控制5.GPIO引脚......