opencv 入门学习

news2024/10/6 22:28:36

opencv

演示

  • 输入说明 原图在顶层后然后再去按键,不然会失效(未知原因)
    1.roberts 边缘检测
    2.sobel算子
    3.Canny算子
    4.Laplace算子
    5.Canny算子,轮廓显示
    空格 人脸检测
  • 准备一张图片
  • 效果 默认显示原图和灰阶图
    在这里插入图片描述
  1. roberts 边缘检测
//roberts 边缘检测
Mat roberts(Mat srcImage)
{
    Mat dstImage = srcImage.clone();
    int nRows = dstImage.rows;
    int nCols = dstImage.cols;
    for (int i = 0; i < nRows - 1; i++) {
        for (int j = 0; j < nCols - 1; j++) {
            //根据公式计算
            int t1 = (srcImage.at<uchar>(i, j) -
                srcImage.at<uchar>(i + 1, j + 1)) *
                (srcImage.at<uchar>(i, j) -
                    srcImage.at<uchar>(i + 1, j + 1));
            int t2 = (srcImage.at<uchar>(i + 1, j) -
                srcImage.at<uchar>(i, j + 1)) *
                (srcImage.at<uchar>(i + 1, j) -
                    srcImage.at<uchar>(i, j + 1));
            //计算g(x,y)
            dstImage.at<uchar>(i, j) = (uchar)sqrt(t1 + t2);
        }
    }
    return dstImage;
}

在这里插入图片描述
2. sobel算子

 Sobel(src_gray, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT);//求x方向梯度
            convertScaleAbs(grad_x, abs_grad_x);//转换格式 8u
            Sobel(src_gray, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT);//求y方向梯度  
            convertScaleAbs(grad_y, abs_grad_y);
            //合并梯度
            addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
            cv::imshow("solbel算子", dst);

在这里插入图片描述
3. Canny算子

  //3.Canny算子
            Mat canny_output;
            vector<vector<Point> > contours;

            vector<Vec4i> hierarchy;
            Canny(src_gray, canny_output, 100, 300);
            cv::imshow("Canny算子", canny_output);

在这里插入图片描述
4. Laplace算子

       Laplacian(src_gray, dst, -1, 3);
       cv::imshow("Laplace算子", dst);

在这里插入图片描述
5. Canny算子,轮廓显示

 Mat canny_output;
            vector<vector<Point> > contours;
            vector<Vec4i> hierarchy;
            Canny(src_gray, canny_output, 100, 300);
            // 寻找轮廓
            findContours(canny_output, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_TC89_KCOS);
            /// 绘出轮廓
            Mat drawing = Mat::zeros(canny_output.size(), CV_8UC3);
            for (int i = 0; i < contours.size(); i++)
            {
                Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
                drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point());
            }
            //在窗体中显示结果
            namedWindow("Contours", WINDOW_AUTOSIZE);
            cv::imshow("Contours", drawing);

在这里插入图片描述
空格 人脸检测 官方的模型,不太精确

//人脸检测的
            CascadeClassifier faceCascade;
            int ret = faceCascade.load("data/haarcascades/haarcascade_frontalface_alt.xml");   //加载分类器,注意文件路径
            //int ret = faceCascade.load("cascade.xml");   //加载分类器,注意文件路径
            if (!ret)//从指定的文件目录中加载级联分类器
            {
                cerr << "ERROR:Could not load classifier cascade" << endl;
                continue;
            }
            Mat imgGray;
            vector<Rect> faces;

            if (src.channels() == 3)
            {
                cvtColor(src, imgGray, COLOR_RGB2GRAY);
            }
            else
            {
                imgGray = src;
            }
            equalizeHist(imgGray, imgGray);

            faceCascade.detectMultiScale(imgGray, faces, 1.1, 4, 0, Size(65, 65));   //检测人脸

            if (faces.size() > 0)
            {
                for (int i = 0; i < faces.size(); i++)
                {
                    //rectangle(src, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
                    //    Scalar(0, 255, 0), 1, 8);    //框出人脸位置
                    rectangle(src, faces[i], Scalar(0, 0, 255), 2, 8, 0);
                }
            }
            else {
                cerr << "ERROR:Could not detect face" << endl;
                continue;
            }
            // namedWindow("FacesOfPrettyGirl", WINDOW_NORMAL);
            cv::imshow("FacesDetect", src);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL版本号6和7去哪了

问题 MySQL版本号6和7去哪了 详细问题 笔者起初误以为MySQL版本号6和7可能由于存在诟病不受欢迎或由于MySQL版本迭代过快导致未能在市场上流行 但是在浏览MySQL官网注意到 MySQL在2017年发布了新的版本8.0,但是在此之前的上一一个版本是5.7,40&#xff0c;那么中间的6和7去哪…

并发编程永远绕不开的难题,跟着大牛带你Java并发编程从入门到精通

我们知道&#xff0c;很多框架或者自研组件的底层&#xff0c;都或多或少涉及到并发编程方面的技术点。 比如&#xff1a;在一些本地缓存组件中&#xff0c;当本地缓存过期后&#xff0c;需要从数据库加载数据&#xff0c;这个阶段中就会涉及到线程并发请求的处理&#xff1b;在…

微信小程序云开发

概念 小程序云开发&#xff0c;让前端程序员拥有后端的能力云函数 &#xff08;nodejs&#xff09;云数据库 &#xff08;mogodb&#xff09;云存储前端写好云函数 > 上传到云服务器 >实现自定云部署前端去调用云函数>间接通过云函数对数据库的操作前端>全栈 注意…

DSP之寄存器映射和CDM文件

DSP之寄存器映射和CDM文件 RAM&#xff1a;程序运行速度快&#xff0c;关掉电源&#xff0c;程序会丢失。 Flash&#xff1a;程序运行速度慢&#xff0c;关掉电源&#xff0c;程序不会丢失。 所以&#xff0c;程序一般存到Flash中&#xff0c;在运行的时候&#xff0c;由CPU将…

2010-2019年208个地级市城乡收入差距泰尔指数

2010-2019年208个地级市城乡收入差距泰尔指数 1、数据来源&#xff1a;各省的统计NJ以及部分地级市的NJ&#xff08;主要是地级市的城镇化率&#xff09; 城镇化率为常驻人口城镇化率而非户籍人口城镇化率。附件中也包含各个地级市的城镇化率&#xff0c;农村人均可支配收入2…

Linux开发工具(1)——yum

文章目录软件包管理器 —— yum安装软件的三个问题Linux开源生态yum查找软件yum下载软件yum删除软件配置yum源Linux下的工具本质也是指令 , 下面我会介绍几个常用的工具 , 分别是yum(相当于是手机上的应用商店 , 可以在里面下载工具 ) vim&#xff08;多模式编辑器&#xff09;…

【毕业设计】深度学习行人车辆流量计数系统 - 目标检测 python

文章目录0 前言1. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段2. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程3 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff…

机器学习-SVM算法

文章目录支持向量机1. 间隔与支持向量1.1. 点到超平面的距离1.2. 去掉绝对值1.3. 最大间隔2. 对偶问题2.1. 引入拉格朗日乘子2.2. 求偏导2.3. 得到对偶问题2.4. 求解内层函数 minw,bL(w,b,α)min_{w,b} L(w,b,\alpha)minw,b​L(w,b,α)2.5. 求解外层函数 maxαminw,bL(w,b,α)m…

.ko 加载报错 “unknown symbol in module or invalid parameter” 排查解决方法

.ko 加载报错 “unknown symbol in module or invalid parameter” 排查解决方法 问题来源 今天参照Sigmastar的文档&#xff0c;修改config重新编译kernel&#xff0c;打开板上RNDIS虚拟网口。 按照步骤重编后&#xff0c;在demo.sh加入insmod指令&#xff0c;按顺序在启动…

【计算机网络】—网络编程(socket)02

目录 一、网络编程的概念 二、UDP数据报套接字编程 2.1 回显服务器代码 2.2 翻译程序&#xff08;英译汉&#xff09; 三、TCP数据报套接字编程 3.1回显服务器 3.2 翻译服务器 一、网络编程的概念 网络编程&#xff1a;指网络上的主机&#xff0c;通过不同的进程&#x…

openlayer+ol-ext 裁剪 天地图 中国或者其他省份 范围进行展示

地图未裁剪或遮盖效果&#xff08;天地图&#xff09; 效果1.crop: 1.1裁剪天地图里面效果 参数&#xff1a; inner: true 1.2裁剪天地图外面 参数&#xff1a; inner: false 核心代码&#xff1a; let crop new Crop({feature: feature[0],inner: false,});vecLayer.addF…

【保姆级】新机器部署JDKTomcat

1、登录服务器&#xff0c;如果非root用户则切root用户 sudo su - 2、在/usr/tmp目录上传JDK、Tomcat安装包 3、将安装包移到/usr/lib目录 mv xxx /usr/lib 4、解压 & 重命名 tar -xzvf xxx mv xxx jdk、mv xxx tomcat 5、配置环境变量 vim /etc/profile JAVA_HOME/u…

引用参考文献[1,2]或者[1-3]

目录准备参考视频引用参考文献[1,2]引用参考文献[1-3]准备 word 2021 参考视频 word中同一位置引用多篇参考文献角标设置 引用参考文献[1,2] 把参考文献交叉引用到文章中&#xff0c;如下图所示 选中标签[1][2] &#xff0c;点击切换域代码&#xff1a; 然后如下图所示 …

递归经典例题 --- 青蛙跳台阶(图文详解)

目录 一、介绍 二、解题思路 介绍动态规划法 三、代码实现 一、介绍 所谓的青蛙跳台阶问题&#xff0c;就是指一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级&#xff08;最多只能跳2级&#xff09;。求该青蛙跳上一个n级的台阶总共有多少种跳法。 二、解题思路 首…

Spring核心解析—Resource与ResourceLoader接口

Resource你不得不知的事情前言Resource内容继承结构DOC解释提供的功能重要的内置Resource实现UrlResourceClassPathResourceFileSystemResourceServletContextResourceInputStreamResourceByteArrayResourceResourceLoader内容结构体系源码分析ResourcePatternResolver内容容器…

gdb调试插件的安装——gef/gdbinit/peda(记录向)

源地址&#xff1a;https://github.com/hugsy/ 根据上面的要求&#xff1a; gdb必须得8.0以上&#xff0c;python得3.6以上&#xff0c;但是一般裸机的gdb都是7.2&#xff0c;python是2.7。我们需要下载更高版本的gdb和python 先将系统自带的gdb删除&#xff1a; sudo yum r…

HMS Core手语服务荣获2022中国互联网大会“特别推荐案例”:助力建设数字社会

11月15日&#xff0c;HMS Core手语服务在2022&#xff08;第二十一届&#xff09;中国互联网大会 “互联网助力经济社会数字化转型”案例评选活动中&#xff0c;荣获“特别推荐案例”。 经过一年多的技术迭代和经验积累&#xff0c;HMS Core手语服务已与多个行业的开发者合作&a…

【算法系列】非线性最小二乘求解-直接求解法

系列文章目录 【算法系列】卡尔曼滤波算法 【算法系列】非线性最小二乘求解-直接求解法 文章目录 系列文章 文章目录 前言 算法推导 总结 前言 SLAM问题常规的解决思路有两种&#xff0c;一种是基于滤波器的状态估计&#xff0c;围绕着卡尔曼滤波展开&#xff1b;另一种则是基…

深度学习入门(三十九)计算性能——分布式训练、参数服务器(TBC)

深度学习入门&#xff08;三十九&#xff09;计算性能——分布式训练、参数服务器前言计算性能——分布式训练、参数服务器课件&#xff08;分布式训练&#xff09;分布式计算GPU机器架构计算一个小批量同步SGD性能性能的权衡实践的建议总结教材&#xff08;参数服务器&#xf…

Lazada如何申请入驻Lazmall品牌商城,会给商家带来哪些权益

Lazmall入驻标准&权益 &#xff08;1&#xff09;Lazmall申请要求:①每月至少售出1单②Seller Rating 270%③Cancellation Rate (取消率) < 2%④Ship on Time及时发货率2 90%⑤Return Rate退货率≤1%⑥店铺至少有10件在线产品⑦店铺有装修⑧店内没有OEM/NO BRAND产品 …