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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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 路由扩张器