首页 > 其他分享 >两幅图像间的比较运算,可实现抠图和通道选择:max( ) min( )

两幅图像间的比较运算,可实现抠图和通道选择:max( ) min( )

时间:2024-08-21 15:28:22浏览次数:12  
标签:name min max 两幅 type cv size

学OpenCV

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

通过掩模,可以实现抠图和通道选择的效果。

这里用的是min

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

 

  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     float arrA[12] = { 1,2,3.3,4,5,9,5,7,8.2,9,10,2 };
 36     float arrB[12] = { 1,2.2,3,1,3,10,6,7,8,9.3,10,1 };
 37 
 38     cv::Mat imga(3, 4, CV_32FC1,arrA);
 39     cv::Mat imgb(3, 4, CV_32FC1, arrB);
 40 
 41     cv::Mat imgas(2, 3, CV_32FC2, arrA);
 42     cv::Mat imgbs(2, 3, CV_32FC2, arrB);
 43 
 44     cv::Mat max, min,maxs,mins;
 45     cv::max(imga, imgb, max);
 46     cv::min(imga, imgb, min);
 47     cv::max(imgas, imgbs, maxs);
 48     cv::min(imgas, imgbs, mins);
 49 
 50     std::cout << "Test1 max " << max << std::endl;
 51     std::cout << "Test1 min " << min << std::endl;
 52     std::cout << "Test1 maxs " << maxs << std::endl;
 53     std::cout << "Test1 mins " << mins << std::endl;
 54 }
 55 
 56 void Test2()
 57 {
 58     cv::Mat imgLena = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\lena.png)");
 59     cv::Mat imgNoobcv = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\noobcv.jpg)");
 60     if (imgLena.empty() || imgNoobcv.empty())
 61     {
 62         std::cout << "bad file" << std::endl;
 63         return;
 64     }
 65 
 66     cv::Mat min, max;
 67     cv::min(imgLena, imgNoobcv, min);
 68     cv::max(imgLena, imgNoobcv, max);
 69     cv::imshow("Test2 imgLena", imgLena);
 70     cv::imshow("Test2 imgNoobcv", imgNoobcv);
 71     cv::imshow("Test2 min", min);
 72     cv::imshow("Test2 max", max);
 73 }
 74 
 75 void Test3()
 76 {
 77     cv::Mat imgLena = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\lena.png)");
 78 
 79     cv::Mat mask1 = cv::Mat::zeros(cv::Size(512, 512), CV_8UC3);
 80     cv::Rect rect(100, 100, 300, 300);
 81     mask1(rect) = cv::Scalar(255, 255, 255);
 82 
 83     cv::Mat min, max;
 84     cv::min(imgLena, mask1, min);
 85     cv::max(imgLena, mask1, max);
 86     cv::imshow("Test3 min", min);
 87     cv::imshow("Test3 max", max);
 88 }
 89 
 90 void Test4()
 91 {
 92     cv::Mat imgLena = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\lena.png)");
 93 
 94     cv::Mat mask1 = cv::Mat(512, 512, CV_8UC3,cv::Scalar(0,0,255));
 95 
 96     cv::Mat min, max;
 97     cv::min(imgLena, mask1, min);
 98     cv::max(imgLena, mask1, max);
 99     cv::imshow("Test4 min", min);
100     cv::imshow("Test4 max", max);
101 }
102 
103 void Test5()
104 {
105     cv::Mat imgLena = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\lena.png)");
106     cv::Mat imgNoobcv = cv::imread(R"(C:\testNoGit\learnOpenCV4-master\data\noobcv.jpg)");
107     cv::Mat imgLenaG, imgNoobcvG;
108     cv::cvtColor(imgLena, imgLenaG, cv::COLOR_BGR2GRAY);
109     cv::cvtColor(imgNoobcv, imgNoobcvG, cv::COLOR_BGR2GRAY);
110     cv::Mat minG, maxG;
111     cv::min(imgLenaG, imgNoobcvG, minG);
112     cv::max(imgLenaG, imgNoobcvG, maxG);
113 
114     cv::imshow("Test5 min", minG);
115     cv::imshow("Test5 max", maxG);
116 }
117 
118 int main()
119 {
120     cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR);
121     
122     Test1();
123     Test2();
124     Test3();
125     Test4();
126     Test5();
127 
128     cv::waitKey(0);
129 
130     return 0;
131 }

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

掩模

 

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

效果

 

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

 

标签:name,min,max,两幅,type,cv,size
From: https://www.cnblogs.com/wlsandwho/p/18371690

相关文章

  • 修改$ORACLE_HOME/network/admin/sqlnet.ora
    原因分析:网上查了主要是说我电脑上orcale的客户端版本和访问的oracle服务端的版本不一致,但我连接的是本地数据库,应该不存在该问题。保险起见,我先在网上找了相关问题的讨论,大家提出的常用解决方案是修改$ORACLE_HOME/network/admin/sqlnet.ora文件里的参数配置,对于该方法跟我的问......
  • Windows安装与启动Minio文件存储桶
    需要选择开源版本,不然报错,需要授权文件需要命令启动C:\minio.exeserverE:\minio\data--console-address"127.0.0.1:9000"--address"127.0.0.1:9005"显示账号密码首先需要创建桶,并上传文件,可以进行共享参考:https://blog.csdn.net/m0_54230514/article/details/138337......
  • [ABC156E] Roaming 题解
    前言这哪有蓝,评分似乎有点过了。思路既然是要统计每个房间人数的排列,那我们就枚举把所有人都放到\(i\)个房间里的方案数,这个用插板法解决,把所有人都放到\(i\)个房间里也就是把他们分成\(i\)份,这一部分的答案就是在\(n\)个人的\(n-1\)个空中插入\(i-1\)块隔板的方案......
  • 编写类A01,定义方法max,实现求某个double数组的最大值,并返回
    1publicclassHomework01{23//编写一个main方法4publicstaticvoidmain(String[]args){5A01a01=newA01();6double[]arr={1,1.4,-1.3,89.8,123.8,66};//;{};7Doubleres=a01.max(arr);8if......
  • C. Perform Operations to Maximize Score
    原题链接题解着重点:分类讨论+二分中位数首先,由于要求中位数,我们先将数组进行排序;接着我们取遍所有的ai及其对应中位数。此时,分歧产生,我们有k次增值的机会,是加到ai(不会改变中位数)上还是增值后改变中位数(此时中位数可能改变)?显然,我们要分类讨论情况一:我们加到选取的ai上,显然......
  • Jumpserver 忘记admin(超级管理员)登录密码——解决方式
    1.登录失败由于各种原因导致多次尝试密码登录失败:2.解决办法2.1查看docker运行的进程[root@jumpserver01~]$dockerps2.2进入jumpserver01这个容器,进行修改账户密码[root@jumpserver01~]$dockerexec-itjumpserver01/bin/bash#如果没有按装django需执行......
  • Easyadmin的安装流程
    应用环境:1.phpStudy8.1.1.32.WNMP:Windows10+Nginx1.15.11+MySql5.7+PHP7.2.9nts 框架版本:1.ThinkPHP6.02.layui2.9.x3.Echarts5.51流程步骤:1.开启phpStudy必要环境后,创建本地网站目录 2.将本地目录指向public后,填写好伪静态规则:location/{if(!-e$re......
  • 【Minecraft】京东云轻量云主机搭建我的世界联机服务器教程(Java版)
    一、Minecraft介绍《我的世界》(英语:Minecraft)是一款沙盒游戏,最初由瑞典游戏设计师马库斯·阿列克谢·泊松单独开发,随后由2009年成立的瑞典公司Mojang开发并发行。玩家可以在一个随机生成的3D世界内,以带材质贴图的立方体为基础进行游戏。游戏中的其他特色包括探索世界、采集资......
  • 【MYSQL】在MySQL中设置 max_allowed_packet、wait_timeout 和 interactive_timeout
    目录重要配置参数临时设置参数1.使用SQL语句设置1.检查当前设置持久化设置修改配置文件在Linux上重启MySQL服务:在Windows上重启MySQL服务:注意事项示例:使用BLOB存储大数据总结解决连接断开问题的总结在处理大于1MB的数据时,MySQL数据库可能会遇到......
  • 推出ExaMAX®电源模块连接器:EPTS-2-P-D-VT-02、EPTS-2-P-D-VT-03、EPTS-2-P-D-VT-04、
    系列概述ExaMAX®电源模块连接器可用作独立电源解决方案,或与ExaMAX®连接器一起用于微型背板和传统背板应用。特征每个端子电流高达17.3A独立电源解决方案,也可与ExaMAX®背板连接器一起使用每个电源模块总计4个端子直角针脚、垂直或直角插座提供不同端子配置EPTS系列:ExaMAX®......