资源简介
配置好opencv249和VS2012的环境之后,设置好工程项目的属性,运行HOGvisualize\Debug或HOGvisualize\Release目录下的opencvtest.exe程序便可看到运行结果,即objimg.jpg图片的hog特征可视化图像hogvisualize.jpg。程序里有较为详细的注释,可以帮助理解hog特征的可视化过程,希望此程序对你有帮助,谢谢。

代码片段和文件信息
#include “opencvtest.h“
using namespace std;
using namespace cv;
// HOGDescriptor visual_imagealizer
// adapted for arbitrary size of feature sets and training images
Mat get_hogdescriptor_visual_image(Mat& origImg
vector& descriptorValues//hog特征向量
Size winSize//图片窗口大小
Size cellSize
int scaleFactor//缩放背景图像的比例
double viz_factor)//缩放hog特征的线长比例
{
Mat visual_image;//最后可视化的图像大小
resize(origImg visual_image Size(origImg.cols*scaleFactor origImg.rows*scaleFactor));
int gradientBinSize = 9;
// dividing 180° into 9 bins how large (in rad) is one bin?
float radRangeForOneBin = 3.14/(float)gradientBinSize; //pi=3.14对应180°
// prepare data structure: 9 orientation / gradient strenghts for each cell
int cells_in_x_dir = winSize.width / cellSize.width;//x方向上的cell个数
int cells_in_y_dir = winSize.height / cellSize.height;//y方向上的cell个数
int totalnrofcells = cells_in_x_dir * cells_in_y_dir;//cell的总个数
//注意此处三维数组的定义格式
//int ***b;
//int a[2][3][4];
//int (*b)[3][4] = a;
//gradientStrengths[cells_in_y_dir][cells_in_x_dir][9]
float*** gradientStrengths = new float**[cells_in_y_dir];
int** cellUpdateCounter = new int*[cells_in_y_dir];
for (int y=0; y {
gradientStrengths[y] = new float*[cells_in_x_dir];
cellUpdateCounter[y] = new int[cells_in_x_dir];
for (int x=0; x {
gradientStrengths[y][x] = new float[gradientBinSize];
cellUpdateCounter[y][x] = 0;
for (int bin=0; bin gradientStrengths[y][x][bin] = 0.0;//把每个cell的9个bin对应的梯度强度都初始化为0
}
}
// nr of blocks = nr of cells - 1
// since there is a new block on each cell (overlapping blocks!) but the last one
//相当于blockstride = (88)
int blocks_in_x_dir = cells_in_x_dir - 1;
int blocks_in_y_dir = cells_in_y_dir - 1;
// compute gradient strengths per cell
int descriptorDataIdx = 0;
int cellx = 0;
int celly = 0;
for (int blockx=0; blockx {
for (int blocky=0; blocky {
// 4 cells per block ...
for (int cellNr=0; cellNr<4; cellNr++)
{
// compute corresponding cell nr
int cellx = blockx;
int celly = blocky;
if (cellNr==1) celly++;
if (cellNr==2) cellx++;
if (cellNr==3)
{
cellx++;
celly++;
}
for (int bin=0; bin {
float gradientStrength = descriptorValues[ descriptorDataIdx ];
descriptorDataIdx++;
gradientStrengths[celly][cellx][bin] += gradientStrength;//因为C是按行存储
} // for (all bins)
// note: overlapping blocks lead to multiple updates of this sum!
// we therefore keep track how often a cell was updated
// to compute average gradient strengths
cellUpdateCounter[celly][cellx]++;//由于block之间有重叠,所以要记录哪些cell被多次计算了
} // for (all cells)
} // for (all block x pos)
} // for (all block y pos)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 36686 2016-03-24 18:56 HOGvisualize\Debug\hogvisualize.jpg
文件 2064 2016-03-24 14:53 HOGvisualize\Debug\objimg.jpg
文件 91136 2016-03-24 21:48 HOGvisualize\Debug\opencvtest.exe
文件 529968 2016-03-24 21:48 HOGvisualize\Debug\opencvtest.ilk
文件 2239488 2016-03-24 21:48 HOGvisualize\Debug\opencvtest.pdb
文件 3566 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\cl.command.1.tlog
文件 141614 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\CL.read.1.tlog
文件 2560 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\CL.write.1.tlog
文件 294985 2016-03-21 20:57 HOGvisualize\opencvtest\Debug\facedetect.obj
文件 361847 2016-03-21 20:58 HOGvisualize\opencvtest\Debug\facematch.obj
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
文件 2 2016-03-24 21:48 HOGvisualize\opencvtest\Debug\li
............此处省略63个文件信息
- 上一篇:电路与模拟电子学
- 下一篇:高保证优品汇电商APP原型axure 8.0制作
相关资源
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- Anti-biofilm Activity of Resveratrol and Ursol
- win10 64位下编译的opencv4.5.5库,opencv
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- 3D_HOG 代码
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
评论
共有 条评论