资源简介
实现高斯金字塔和高斯差分金字塔,采用opencv实现的对图像建立高斯金字塔与高斯差分金字塔。
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
using namespace cv;
static const int GAUSS_ADD_INTERVALS = 3;
static const int DOG_ADD_INTERVALS = 2;
static const float SIFT_INIT_SIGMA = 0.5f;
int _computeOctaves(const cv::Mat& vGrayImage);
void _convertToGray(const cv::Mat& vSrcImage cv::Mat& voGrayImage);
void _createInitImage(const cv::Mat& vSrcImage bool vDoubleImageSize double vSigma cv::Mat& voInitImage);
void _buildGaussPyramid(const cv::Mat& vImage int vIntervals double vSigma std::vector& voGaussPyramid);
void _buildDoGPyramid(const std::vector& vGaussPyramid int vIntervals std::vector& voDoGPyramid);
int main()
{
cv::Mat image = cv::imread(“1.jpg“1);
if (!image.data)
{
std::cout << “Could not open or find the image!“ << std::endl;
return -1;
}
cv::Mat InitImage;
std::vector gaussPyr;
std::vector doGpyr;
_createInitImage(image false 1.6 InitImage);
_buildGaussPyramid(InitImage 3 1.6 gaussPyr);
_buildDoGPyramid(gaussPyr 3 doGpyr);
vector DisGauss(gaussPyr.size());
for (int i = 0; i < (signed int)gaussPyr.size(); ++i)
{
gaussPyr[i].convertTo(DisGauss[i] DataType::type 100 0);
std::ostringstream oss;
oss << i;
std::string str = oss.str();
std::string name = “gaussPyr“ + str;
cv::imshow(name DisGauss[i]);
}
for (int j = 0; j < doGpyr.size(); ++j)
{
std::ostringstream oss;
oss << j;
std::string str = oss.str();
std::string name2 = “DoGPyr“ + str;
cv::imshow(name2 doGpyr[j]);
}
cvWaitKey(0);
return 0;
}
//******************************************************************
//FUNCTION:
int _computeOctaves(const cv::Mat& vGrayImage)
{
int OctavesNum;
OctavesNum = cvRound(log(MIN(vGrayImage.size().width vGrayImage.size().height)) / log(2)) - 2;
return OctavesNum;
}
//******************************************************************
//FUNCTION:
void _convertToGray(const cv::Mat& vSrcImage cv::Mat& voGrayImage)
{
Mat gray;
if (vSrcImage.channels() == 3 || vSrcImage.channels() == 4)
cv::cvtColor(vSrcImage gray cv::COLOR_BGR2GRAY);
else
vSrcImage.copyTo(gray);
//voGrayImage = gray;
gray.convertTo(voGrayImage DataType::type 1.0 0);
}
//******************************************************************
//FUNCTION:
void _createInitImage(const cv::Mat& vSrcImage bool vDoubleImageSize double vSigma cv::Mat& voInitImage)
{
cv::Mat OrginalImage = vSrcImage;
cv::Mat GrayImage;
_convertToGray(OrginalImage GrayImage);
double SigmaDiff;
if (vDoubleImageSize)
{
SigmaDiff = sqrtf(std
相关资源
- 用C语言实现高斯-赛德尔迭代方法
- 高斯混合模型直观实现
- 高斯投影正算C++源代码
- 潮流计算 高斯赛德尔法
- 用C语言对图像加高斯噪声
- 实现用c++产生高斯噪声
- 递归高斯模糊源代码最快速的高斯模
- C++高斯白噪声程序
- 高斯函数消元法c语言源代码,解矩阵
- 高斯牛顿法 最小二乘法 拟合函数
- 中值滤波、均值滤波和高斯滤波代码
- c++写的OpenGL程序透明金字塔有加上光
- C++高斯投影正反算
- 一个老师给的高斯投影正、反算c++源
- LK金字塔光流法
- 武汉大学测绘学院大地测量学编程-
- 用C语言实现高斯滤波
- 高斯滤波的c++代码实现
- C++实战源码-PK少年高斯
- 高斯 Jordan消元法 c语言代码
- opencv调入显示图片做高斯模糊
- 大地测量学编程C++实现
- C语言实现方程组求解算法
- 全主元高斯消元法
- 多波段融合/拉普拉斯金字塔融合Ope
- 图像处理 高斯平滑 C/C++语言实现
- C++ 1.大地坐标与空间直角坐标的相互
- 随机信号生成
- 高斯正反算C++源码大地坐标与经纬度
- 高斯-赛德尔迭代C++源码
评论
共有 条评论