• 如何使用OpenCV作图像或矩阵的逻辑运算


    所谓逻辑运算,主要是指逻辑与运算、逻辑或运算、逻辑非运算、逻辑异或运算。
    可用函数bitwise_and()实现图像或矩阵的逻辑与运算;
    可用函数bitwise_or()实现图像或矩阵的逻辑或运算;
    可用函数bitwise_not()实现图像或矩阵的逻辑非运算;
    可用函数bitwise_xor()实现图像或矩阵的逻辑异或运算

    这四个函数的使用非常简单,大家看一下下面的示例代码就会用了。

    值得注意的是,逻辑运算是在二进制的情况下进行的,所以大家首先要把参与运算的数转换成二进制数。

    为了方便大家,以下代码中数字的二进制分别如下:
    01→0000 0001
    88→0101 1000

    66→0100 0010
    02→0000 0010

    55→0011 0111

    C++示例代码如下:

    //出处:昊虹AI笔记网(hhai.cc)
    //用心记录计算机视觉和AI技术
    
    //博主微信/QQ 2487872782
    //QQ群 271891601
    //欢迎技术交流与咨询
    
    //OpenCV版本 OpenCV3.0
    
    #include 
    #include 
    
    using namespace std;
    using namespace cv;
    
    
    int main()
    {
    
    	cv::Mat A1 = (cv::Mat_<uchar>(3, 3) << 1, 1, 1,
    		66, 66, 66,
    		55, 55, 55);
    	cout << "A1中的数据为:\n" << A1 << endl << endl;
    
    
    	cv::Mat B1 = (cv::Mat_<uchar>(3, 3) << 88, 88, 88,
    		2, 2, 2,
    		55, 55, 55);
    	cout << "B1中的数据为:\n" << B1 << endl << endl;
    
    
    	cv::Mat C1, C2, C3, C4;
    	bitwise_and(A1, B1, C1);
    	bitwise_or(A1, B1, C2);
    	bitwise_not(A1, C3);
    	bitwise_xor(A1, B1, C4);
    
    	cout << "C1中的数据为:\n" << C1 << endl << endl;
    	cout << "C2中的数据为:\n" << C2 << endl << endl;
    	cout << "C3中的数据为:\n" << C3 << endl << endl;
    	cout << "C4中的数据为:\n" << C4 << endl << endl;
    
    	return(0);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    运行结果如下:
    在这里插入图片描述
    Python代码如下:

    # -*- coding: utf-8 -*-
    # 出处:昊虹AI笔记网(hhai.cc)
    # 用心记录计算机视觉和AI技术
    
    # 博主微信/QQ 2487872782
    # QQ群 271891601
    # 欢迎技术交流与咨询
    
    # OpenCV的版本为4.4.0
    
    import numpy as np
    import cv2 as cv
    
    if __name__ == '__main__':
        A1 = np.array([[1, 1, 1],
                      [66, 66, 66],
                      [55, 55, 55]], dtype='uint8')
    
        B1 = np.array([[88, 88, 88],
                      [2, 2, 2],
                      [55, 55, 55]], dtype='uint8')
    
        C1 = cv.bitwise_and(A1, B1)
        C2 = cv.bitwise_or(A1, B1)
        C3 = cv.bitwise_not(A1)
        C4 = cv.bitwise_xor(A1, B1)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    运行结果如下:
    在这里插入图片描述

  • 相关阅读:
    十年架构师带来的Spring源码解析,极度深寒,程序员修炼内功必备
    jxTMS设计思想之权限
    09-React路由使用(React Router 6)
    【C语言基础】Chap. 5. 语句基础
    Linux20 -- 线程安全、保证线程安全的示例代码
    02 - DCM模块的配置容器
    VMware使用vim遇到的一系列问题
    时空预测 | 线性时空预测模型、图时空预测
    SLAM从入门到精通(从amcl到navigation软件栈)
    Zebec联合Visa推出实体借记卡持续利好生态,$ZBC表现强劲
  • 原文地址:https://blog.csdn.net/wenhao_ir/article/details/128112794