opencv-位运算

非运算

    cv::Mat src(5, 4, CV_8UC3,cv::Scalar(10,20,30));
    std::cerr<<src<<std::endl;

    cv::Mat dst;
    cv::bitwise_not(src, dst);//对二进制数据进行“非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作,~1=0,~0=1

    std::cerr<<dst<<std::endl;

实例:黑白颠倒

    cv::Mat src = cv::imread("D:/bb/tu1/4.jpg");
    cv::Mat dst = ~src;  //取反

    cv::namedWindow("src");
    cv::imshow("src", src);
    cv::namedWindow("dst");
    cv::imshow("dst", dst);

 

 

 

与运算

图像的与运算主要用于获取某个图像中感兴趣的部分

复制代码
    cv::Mat src(5, 4, CV_8UC3, cv::Scalar(1, 3, 5));
    cv::Mat src1(5, 4, CV_8UC3, cv::Scalar(1, 2, 4));
    cv::Mat dst(5, 4, CV_8UC3, cv::Scalar(11, 22, 44));
    cv::Mat mask(5, 4, CV_8UC3, cv::Scalar(10, 20, 40));
    cv::Rect r1(0, 0, 2, 1);
    mask(r1) = cv::Scalar(0, 0, 0);
    cv::bitwise_and(src, src1, dst);  //对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0

    std::cerr << src << std::endl;
    std::cerr << src1 << std::endl;
    std::cerr << dst << std::endl;
复制代码

实例

dog.png

 

复制代码
    cv::Mat src = cv::imread("D:/bb/tu1/dog.png");
    cv::Mat mask(src.rows,src.cols,CV_8UC3,cv::Scalar(0,0,0));
    cv::Rect r(162,70,232,150);
    cv::Point p1= cv::Point(162, 70);
    cv::Point p2 = cv::Point(232, 150);
    cv::rectangle(mask,p1,p2,cv::Scalar(255,255,255),-1);
    cv::Mat m_out;

    bitwise_and(src,mask,m_out);//mask值为255的不变,mask值为0的都变成0
    //利用mask矩阵,提取感兴趣的区域

    cv::namedWindow("src");
    cv::imshow("src",src);
    cv::namedWindow("mask");
    cv::imshow("mask",mask);
    cv::namedWindow("m_out");
    cv::imshow("m_out",m_out);
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bitwise_or是对二进制数据进行“或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“或”操作,1|1=1,1|0=1,0|1=1,0|0=0 

bitwise_xor是对二进制数据进行“异或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“异或”操作,1^1=0,1^0=1,0^1=1,0^0=0

 

 

 

 

 

 

posted @   天子骄龙  阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-10-26 qt--Q_PROPERTY自定义属性
2020-10-26 路由扩张器
点击右上角即可分享
微信分享提示

目录导航