无锡网站建设推荐手机分销网站公司

news/2025/9/22 15:33:23/文章来源:
无锡网站建设推荐,手机分销网站公司,五百丁简历官网,优设网logo目录HOG是什么#xff1f;HOG vs SIFTHOG步骤HOG在检测行人中的方式Opencv实现HOGDescriptor的构造函数#xff1a;行人检测HOGSVM步骤简化版的HOG计算HOG是什么#xff1f; 方向梯度直方图( Histogram of Oriented Gradient, HOG )特征是一种在计算机视觉和图像处理中用来进… 目录HOG是什么HOG vs SIFTHOG步骤HOG在检测行人中的方式Opencv实现HOGDescriptor的构造函数行人检测HOGSVM步骤简化版的HOG计算HOG是什么 方向梯度直方图( Histogram of Oriented Gradient, HOG )特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过 计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中。 HOG vs SIFT SIFT :对特征点的描述方法 HOG :对一定区域的特征量的描述方法 1、可以表现较大的形状 2、非常适合行人及车辆检测 假设我们在智能驾驶中要检测行人 正样本 负样本 识别的本质是要找到正样本和负样本最本质的区别。例如行人在肩部具有横向边缘、两臂具有竖向边缘。而非行人样本中的边缘是杂乱无章的。因此可以通过构建梯度的直方图来检测形状。由于直方图损失了空间信息所以HOG将图像分割为一个一个小的区域联系阈值处理中的分块处理法对小的区域分别构建直方图然后拼接得到一个大的直方图。 HOG的缺点 速度慢实时性差难以处理遮挡问题。 HOG特征不具有旋转鲁棒性以及尺度鲁棒性 HOG步骤 1、Gamma矫正增强图像的对比度 2、计算梯度信息 3、以cell一个像素块为单位计算梯度直方图 4、以block几个cell为一个block为单位,对特征量进行归一化 具体步骤 一般来说对梯度方向进行九等分量化。 一般以3* 3的像素组成一个cell这样每个cell就可以得到一个9维的直方图。 每 3*3个cell组成一个block在每个block进行归一化 归一化的目的增强对亮度的鲁棒性。 HOG在检测行人中的方式 通常采用滑窗的方式 计算滑窗中包含的像素的梯度直方图然后与行人模板中的直方图进行对比如利用各种矩当两者十分相似时我们就认为这个区域是行人区域。 从而延生出的问题 由于模板是固定大小的因此只能检测固定大小的行人。当图像中的行人尺寸发生变化时如何使用一个单一的模板检测 Opencv实现 OpenCV实现了两种类型的基于HOG特征的行人检测分别是SVM和CascadeOpenCV自带的级联分类器的文件的位置在“XX\opencv\sources\data\hogcascades”OpenCV4.x版本可用。 opencv自带的人数检测文件所在位置在opencv的安装目录下下面是我的安装位置 D:\Program Files\opencv\sources\samples\cpp HOGDescriptor的构造函数 CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),free_coef(-1.f), nlevels(HOGDescriptor::DEFAULT_NLEVELS), signedGradient(false){}窗口大小 winSize(64,128), 块大小blockSize(16,16), 块滑动增量blockStride(8,8), 胞元大小cellSize(8,8), 梯度方向数nbins(9)。 上面这些都是HOGDescriptor的成员变量括号里的数值是它们的默认值它们反应了HOG描述子的参数。 nBins表示在一个胞元cell中统计梯度的方向数目例如nBins9时在一个胞元内统计9个方向的梯度直方图每个方向为180/920度。 HOGDescriptor中有两种Detector分别是getDaimlerPeopleDetector、getDefaultPeopleDetector 行人检测HOGSVM步骤 参考的代码 #include opencv2/objdetect.hpp #include opencv2/highgui.hpp #include opencv2/imgproc.hpp #include opencv2/videoio.hpp #include iostream #include iomanipusing namespace cv; using namespace std;class Detector {//enum Mode { Default, Daimler } m;enum { Default, Daimler };//定义枚举类型int m;HOGDescriptor hog, hog_d; public:Detector(int a) : m(a), hog(), hog_d(Size(48, 96), Size(16, 16), Size(8, 8), Size(8, 8), 9)//构造函数初始化对象时自动调用m,hog,hog_d是数据成员后跟一个放在圆括号中的初始化形式{hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());hog_d.setSVMDetector(HOGDescriptor::getDaimlerPeopleDetector());}void toggleMode() { m (m Default ? Daimler : Default); }string modeName() const { return (m Default ? Default : Daimler); }vectorRect detect(InputArray img){// Run the detector with default parameters. to get a higher hit-rate// (and more false alarms, respectively), decrease the hitThreshold and// groupThreshold (set groupThreshold to 0 to turn off the grouping completely).vectorRect found;if (m Default)hog.detectMultiScale(img, found, 0, Size(8, 8), Size(32, 32), 1.05, 2, false);else if (m Daimler)hog_d.detectMultiScale(img, found, 0.5, Size(8, 8), Size(32, 32), 1.05, 2, true);return found;}void adjustRect(Rect r) const{// The HOG detector returns slightly larger rectangles than the real objects,// so we slightly shrink the rectangles to get a nicer output.r.x cvRound(r.width * 0.1);r.width cvRound(r.width * 0.8);r.y cvRound(r.height * 0.07);r.height cvRound(r.height * 0.8);} }; //修改参数区域 static const string keys { help h | | print help message } { camera c | 0 | capture video from camera (device index starting from 0) } { video v | D:/opencv/opencv4.0/opencv4.0.0/sources/samples/data/vtest.avi| use video as input };int main(int argc, char** argv) {CommandLineParser parser(argc, argv, keys); //keys:描述可接受的命令行参数的字符串parser.about(This sample demonstrates the use ot the HoG descriptor.);//设置相关信息。相关信息会在 printMessage 被调用时显示。if (parser.has(help)){parser.printMessage();return 0;}int camera parser.getint(camera);string file parser.getstring(video);if (!parser.check())//检查解析错误。当错误发生时返回true。错误可能是转换错误、丢失参数等。{parser.printErrors();return 1;}VideoCapture cap;if (file.empty())cap.open(camera);elsecap.open(file.c_str());if (!cap.isOpened()){cout Can not open video stream: (file.empty() ? camera : file) endl;return 2;}cout Press q or ESC to quit. endl;cout Press space to toggle between Default and Daimler detector endl;//Default and Daimler detectorDetector detector(1); //初始化使用Daimler detectorMat frame;for (;;){cap frame;if (frame.empty()){cout Finished reading: empty frame endl;break;}int64 t getTickCount();vectorRect found detector.detect(frame);t getTickCount() - t;// show the window{ostringstream buf;buf Mode: detector.modeName() ||| FPS: fixed setprecision(1) (getTickFrequency() / (double)t);putText(frame, buf.str(), Point(10, 30), FONT_HERSHEY_PLAIN, 2.0, Scalar(0, 0, 255), 2, LINE_AA);}for (vectorRect::iterator i found.begin(); i ! found.end(); i){Rect r *i;detector.adjustRect(r);rectangle(frame, r.tl(), r.br(), cv::Scalar(0, 255, 0), 2);}imshow(People detector, frame);// interact with userconst char key (char)waitKey(30);if (key 27 || key q) // ESC{cout Exit requested endl;break;}else if (key ){detector.toggleMode();}}return 0; }简化后的对单张图片的检测 #include opencv2/objdetect.hpp #include opencv2/highgui.hpp #include opencv2/imgproc.hpp #include opencv2/videoio.hpp #include iostream #include iomanipusing namespace cv; using namespace std;class Detector {//enum Mode { Default, Daimler } m;enum { Default, Daimler };//定义枚举类型int m;HOGDescriptor hog, hog_d; public:Detector(int a) : m(a), hog(), hog_d(Size(48, 96), Size(16, 16), Size(8, 8), Size(8, 8), 9)//构造函数初始化对象时自动调用m,hog,hog_d是数据成员后跟一个放在圆括号中的初始化形式{hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());hog_d.setSVMDetector(HOGDescriptor::getDaimlerPeopleDetector());}void toggleMode() { m (m Default ? Daimler : Default); }string modeName() const { return (m Default ? Default : Daimler); }vectorRect detect(InputArray img){// Run the detector with default parameters. to get a higher hit-rate// (and more false alarms, respectively), decrease the hitThreshold and// groupThreshold (set groupThreshold to 0 to turn off the grouping completely).vectorRect found;if (m Default)hog.detectMultiScale(img, found, 0, Size(8, 8), Size(32, 32), 1.05, 2, false);else if (m Daimler)hog_d.detectMultiScale(img, found, 0.5, Size(8, 8), Size(32, 32), 1.05, 2, true);return found;}void adjustRect(Rect r) const{// The HOG detector returns slightly larger rectangles than the real objects,// so we slightly shrink the rectangles to get a nicer output.r.x cvRound(r.width * 0.1);r.width cvRound(r.width * 0.8);r.y cvRound(r.height * 0.07);r.height cvRound(r.height * 0.8);} };int main(int argc, char** argv) {Detector detector(1); //初始化使用Daimler detectorMat imgimread(D:\\opencv_picture_test\\HOG行人检测\\timg.jpg);vectorRect found detector.detect(img);for (vectorRect::iterator i found.begin(); i ! found.end(); i){Rect r *i;detector.adjustRect(r); rectangle(img, r.tl(), r.br(), cv::Scalar(0, 255, 0), 2);}imshow(People detector, img);waitKey(0);return 0; }结果 简化版的HOG计算 需要用到的知识点 曼哈顿距离 由于一般的建立数组的方法在【】中填变量是行不通的这里我们采用动态建立数组的方法。在程序返回前必须将内存释放 #include opencv2/opencv.hpp #include opencv2/features2d.hpp #include iostream #include windows.h #include stdio.h #include time.h #include math.h //#include My_ImageProssing_base.h #define WINDOW_NAME1 【程序窗口1】 #define WINDOW_NAME2 【程序窗口2】 using namespace cv; using namespace std; RNG g_rng(12345);Mat src_image; Mat img1; Mat img2;//*--------------------------手动实现HOG描述子-------------------------------------*/ int angle_lianghua(float angle) {int result angle/45;return result; } int main() {//改变控制台字体颜色system(color 02);//读取图像src_image imread(D:\\opencv_picture_test\\HOG行人检测\\hogTemplate.jpg);img1 imread(D:\\opencv_picture_test\\HOG行人检测\\img1.jpg);img2 imread(D:\\opencv_picture_test\\HOG行人检测\\img2.jpg);//出错判断if (!(src_image.data || img1.data || img2.data)){cout image load failed! endl;return -1;}//【1】计算hogTemplate//所有像素计算梯度和角度方向Mat gx, gy;Mat mag, angle; //幅值和角度Sobel(src_image, gx, CV_32F, 1, 0, 1);Sobel(src_image, gy, CV_32F, 0, 1, 1);cartToPolar(gx, gy, mag, angle, false); //false获得的是角度int cellSize 16; //每个cell的大小int nx src_image.cols / cellSize; //每行有几个int ny src_image.rows / cellSize; //每列有几个int cellnums nx * ny; //有几个cellint bins cellnums * 8;float* ref_hist new float[bins];memset(ref_hist, 0, sizeof(float) * bins);int binnum 0;//计算一张图for (int j 0;j ny;j){for (int i 0;i nx;i){//计算每个cell的直方图for (int y j * cellSize;y (j 1) * cellSize;y){for (int x i * cellSize;x (i 1) * cellSize;x){//对角度进行量化int tempangle1 0;float tempangle2 angle.atfloat(y, x); //当前像素的角度值tempangle1 angle_lianghua(tempangle2); //当前cell的角度分量float magnitude mag.atfloat(y, x); //当前像素的幅度值ref_hist[tempangle1 binnum * 8] magnitude; //在数组中加上当前的}}binnum; //cell数目1}}//【2】计算img1//所有像素计算梯度和角度方向Mat gx_img1, gy_img1;Mat mag_img1, angle_img1; //幅值和角度Sobel(img1, gx_img1, CV_32F, 1, 0, 1);Sobel(img1, gy_img1, CV_32F, 0, 1, 1);cartToPolar(gx_img1, gy_img1, mag_img1, angle_img1, false); //false获得的是角度nx img1.cols / cellSize; //每行有几个ny img1.rows / cellSize; //每列有几个cellnums nx * ny; //有几个cellbins cellnums * 8;float* ref_hist_img1 new float[bins];memset(ref_hist_img1, 0, sizeof(float) * bins);binnum 0;//计算一张图for (int j 0;j ny;j){for (int i 0;i nx;i){//计算每个cell的直方图for (int y j * cellSize;y (j 1) * cellSize;y){for (int x i * cellSize;x (i 1) * cellSize;x){//对角度进行量化int tempangle1 0;float tempangle2 angle_img1.atfloat(y, x); //当前像素的角度值tempangle1 angle_lianghua(tempangle2); //当前cell的角度分量float magnitude mag_img1.atfloat(y, x); //当前像素的幅度值ref_hist_img1[tempangle1 binnum * 8] magnitude; //在数组中加上当前的}}binnum; //cell数目1}}//【3】计算img2//所有像素计算梯度和角度方向Mat gx_img2, gy_img2;Mat mag_img2, angle_img2; //幅值和角度Sobel(img2, gx_img2, CV_32F, 1, 0, 1);Sobel(img2, gy_img2, CV_32F, 0, 1, 1);cartToPolar(gx_img2, gy_img2, mag_img2, angle_img2, false); //false获得的是角度nx img2.cols / cellSize; //每行有几个ny img2.rows / cellSize; //每列有几个cellnums nx * ny; //有几个cellbins cellnums * 8;float* ref_hist_img2 new float[bins];memset(ref_hist_img2, 0, sizeof(float) * bins);binnum 0;//计算一张图for (int j 0;j ny;j){for (int i 0;i nx;i){//计算每个cell的直方图for (int y j * cellSize;y (j 1) * cellSize;y){for (int x i * cellSize;x (i 1) * cellSize;x){//对角度进行量化int tempangle1 0;float tempangle2 angle_img2.atfloat(y, x); //当前像素的角度值tempangle1 angle_lianghua(tempangle2); //当前像素的角度分量float magnitude mag_img2.atfloat(y, x); //当前像素的幅度值ref_hist_img2[tempangle1 binnum * 8] magnitude; //在数组中加上当前的}}binnum; //cell数目1}}//【4】分别计算ref_hist_img1和ref_hist\ref_hist_img2和ref_hist的矩int result1 0;int result2 0;for (int i 0;i bins;i){//这里简化运算不计算平方根,而是计算absresult1 abs(ref_hist[i]- ref_hist_img1[i]);result2 abs(ref_hist[i] - ref_hist_img2[i]);}cout result1 endl;cout result2 endl;if (result1 result2){cout img1更与原图相似 endl;}elsecout img2更与原图相似 endl;waitKey(0);delete[] ref_hist;delete[] ref_hist_img1;delete[] ref_hist_img2;return 0; }结果 Reference OpenCV实战4 HOGSVM实现行人检测 HOG detectMultiScale 参数分析 CommandLineParser类命令行解析类 C语法构造函数以及析构函数 《数字图像处理PPT.李竹版》

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

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

相关文章

win2008网站404被称为网页制作三剑客的是

获取/查看本机出口ip curl http://members.3322.org/dyndns/getip

哪个网站做视频赚钱哈尔滨建筑专业网站

需求 使用Python基础写一个基于控制台的学生管理平台,里面功能分别是:1.录入学生信息2.查找学生信息3.删除学生信息4.修改学生信息5.排序6.统计学生总人数7.显示所有学生信息,要求数据存储在文件里。 代码 代码资源地址可以直接下载 效果图…

win2003怎么做网站扫一扫网页版在线使用

如果仅仅在数据库中设置了类型为 CLOB 字段类型,使用普通的 INSERT 语句直接写入数据到数据库的话,它依然会将其视为 VARCHAR 类型数据,并最大长度为 4000 字符。超过该长度会报出字符串超长,写入数据失败的错误。使用 Dapper 处理…

建站工具推荐网站开发毕业答辩问题

创建最高权限用户 进入 MySQL 容器的命令行界面。您可以使用以下命令&#xff1a; 修改配置文件my.cnf 无密码进入 [mysqld]下输入 skip-grant-tables重启mysql容器 进入容器内部 container_name 容器ID或name docker restart mysql docker exec -it <container_name>…

视频调色神器!CyberLink ColorDirector:从入门到专业的视频色彩魔法工具

描述 CyberLink ColorDirector是台湾Link Technologies开发的一款创意视频后期着色软件,旨在帮助您改进和增强视频颜色。 通过一系列易于使用的工具,您可以轻松地校正颜色、调整色调,甚至调整视频中移动对象的本地颜…

【AI智能体】Dify 搭建数据分析应用实战操控详解

【AI智能体】Dify 搭建数据分析应用实战操控详解2025-09-22 15:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

Leveraging Context-Aware Prompting for Commit Message Generation 论文笔记

介绍 (1) 发表:EMNLP24 (2) 背景 现有方法通常存在一些缺点,例如只关注变化的行是不够的,或者在变化周围包含不相关的行会带来噪声。如图 1 所示,添加和删除的代码实际上是相同的,只是位置不同,导致代码更改定义…

P4951 [USACO01OPEN] Earthquake 题解

111首先要知道 0/1 分数规划这个经典模型 给定 \(a_1,a_2....a_n\) 以及 \(b_1,b_2....b_n\) 求一组解 \(x_i(1\leq i \leq n,x_i \in [0,1] )\),使下列式子最大化: \[\frac {\sum_{i=1}^n a_i \times x_i}{\sum_{i=…

门户网站开发需求文档软件外包app

1.如图&#xff0c;实现功能: Hello World!字符串跟随鼠标移动鼠标左击Hello World!颜色为红色鼠标右击Hello World!颜色为蓝色鼠标滚轮滚动改变Hello World!颜色的RGB中的G值 2.实现工具: vs20133.实现步骤: 新建一个win32项目 如图,看到HelloWorldGame.cpp中 _tWinMain()的函…

网站备案信息变更买个小程序多少钱

目录 一、边缘磨损效果 二、刮痕效果 三、边缘磨损与刮痕的混合 四、锈迹效果 本篇效果&#xff1a; 一、边缘磨损效果 将智能材质“Iron Forge Old” 拖入图层 打开“Iron Forge Old” 文件夹&#xff0c;选中“Sharpen”&#xff08;锐化&#xff09;&#xff0c;增大“…

网站管理人员怎么做手机app软件

目录 运算符 数字运算符 比较运算符 逻辑运算符 转义字符 变量使用 变量定义 变量类型 变量命名 变量函数 input函数 type函数 条件语句 If 格式 案例1&#xff0c;判断年龄 案例2&#xff0c;借钱 案例3&#xff0c;and、or应用 循环语句 for 格式 案例…

深圳网站建设学习网站建设购销合同

1 释放锁流程概述 ReentrantLock的unlock()方法不区分公平锁还是非公平锁。 首先调用unlock()方法。 unlock()底层使用的是Sync.release(1)方法 public void unlock() {<!-- --> sync.release(1); } release(1)方法会调用tryRelease(1)去尝试解锁。 public fin…

个人网站做项目万能软文模板

文章目录 什么是SSH协议&#xff1f;SSH为何是安全的&#xff1f;SSH由哪些组件构成&#xff1f;SSH可以帮助实现的功能SSH的工作原理SSH的历史版本常用的SSH工具有哪些SSH配置案例参考Windows 安装SSHUbuntu系统SSH配置Cisco Switch SSH配置华为Switch SSH配置 客户端启用SSH连…

比较好设计网站wordpress 按钮美化

Vue.js 是一套构建用户界面的渐进式框架。只关注视图层, 采用自底向上增量开发的设计。 目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。Vue 学习起来非常简单。 目录 常用的vue.js版本及方法 学习vue之前需要掌握基础html+css+javaScript知识。 比如: …

python 网站开发书籍wordpress百度熊掌号

牛年跳槽季如火如荼&#xff0c;敏锐点的小伙伴儿应该都留意到了&#xff0c;BAT新年都在招聘.NET。2020年11月份发布.NET5统一了七大应用方向&#xff0c;.NET6的2个预览版已经把Blazor升级、跨平台UI方案MAUI、CLR性能优化等都放出来了&#xff0c;.NET前景充满想象&#xff…

桂林做网站建设的公司电子商务网站建设与管理总结

SCI论文作图规范包括以下几个方面&#xff1a; 一、图片格式 SCI论文通常接受的图片格式包括TIFF、EPS和PDF等。其中&#xff0c;TIFF格式是一种高质量的图像格式&#xff0c;适用于需要高分辨率和颜色准确性的图片&#xff1b;EPS格式是一种矢量图形格式&#xff0c;适用于需…

做网站的例子建设网站的五个步骤

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战4&#xff08;解决Redis缓存穿透、雪崩、击穿&#xff09; &#x1f4da;订阅专…

用ida插件快速审计函数调用

如果xref窗口会显示调用的伪代码,也许就不会有今天...前言 我又要在前言絮絮叨叨一下我是为什么要做这个小插件的了...就不看 在审查程序的漏洞的时候,我们可能会重点关注那么几个重点函数的调用:system肯定是重中之…

【ACM独立出版|往届已EI、Scopus检索|合作SSCI】第二届数字经济与计算机科学国际学术会议(DECS 2025)

第二届数字经济与计算机科学国际学术会议(DECS 2025)将于2025年10月17日至10月19日在中国武汉召开。本次会议旨在汇聚来自全球的学者、研究人员和业界专家,共同探讨数字经济与计算机科学领域的最新发展与应用。随着…

schematool -initSchema -dbType mysql

hive启动之前一定要用这条命令初始化