基于vs2010和opencv的图像转化到hsv空间再emd匹配
来源:互联网 发布:淘宝贷款是真的吗 编辑:程序博客网 时间:2024/04/30 01:22
float emd_hsvhisto(Mat frame,Mat frame_get)
{
Mat imghsv1,imghsv2;
//imghsv1.create(frame.size(),CV_32FC3);
//imghsv2.create(frame_get.size(),CV_32FC3);
cvtColor(frame,imghsv1, COLOR_BGR2HSV);
cvtColor(frame_get,imghsv2, COLOR_BGR2HSV);
int h_bins=8,s_bins=5,v_bins=5;
const int histsize[]={8,5,5};
float h_range[]={0,360};
float s_range[]={0,1};
float v_range[]={0,1};
const float*histRange[]={h_range,s_range,v_range};
bool uniform=true;
bool accumulate=false;
Mat hist1,hist2;
int channels[]={0,1,2};
calcHist( &imghsv1, 1, channels, Mat(), hist1, 3, histsize, histRange, uniform, accumulate );
normalize(hist1, hist1);
calcHist( &imghsv2, 1, channels, Mat(), hist2, 3, histsize, histRange, uniform, accumulate );
normalize(hist2, hist2);
Mat sig1,sig2;
int numrows=h_bins*s_bins*v_bins;
sig1=Mat(numrows,4,CV_32FC1,Scalar::all(0));
sig2=Mat(numrows,4,CV_32FC1,Scalar::all(0));
float value;
for(int h=0;h<h_bins;h++)
{
for(int s=0;s<s_bins;s++)
{
for(int v=0;v<v_bins;v++)
{
value=hist1.at<float>(h,s,v);
float* data1=sig1.ptr<float>(h*s*v);
data1[0]=value;
data1[1]=h;
data1[2]=s;
data1[3]=v;
value=hist2.at<float>(h,s,v);
float* data2=sig2.ptr<float>(h*s*v);
data2[0]=value;
data2[1]=h;
data2[2]=s;
data2[3]=v;
}
}
}
float emd_distance;
emd_distance=EMD(sig1,sig2,CV_DIST_L2);
emd_distance=1-emd_distance;
emd_distance=emd_distance*100;
return emd_distance;
{
Mat imghsv1,imghsv2;
//imghsv1.create(frame.size(),CV_32FC3);
//imghsv2.create(frame_get.size(),CV_32FC3);
cvtColor(frame,imghsv1, COLOR_BGR2HSV);
cvtColor(frame_get,imghsv2, COLOR_BGR2HSV);
int h_bins=8,s_bins=5,v_bins=5;
const int histsize[]={8,5,5};
float h_range[]={0,360};
float s_range[]={0,1};
float v_range[]={0,1};
const float*histRange[]={h_range,s_range,v_range};
bool uniform=true;
bool accumulate=false;
Mat hist1,hist2;
int channels[]={0,1,2};
calcHist( &imghsv1, 1, channels, Mat(), hist1, 3, histsize, histRange, uniform, accumulate );
normalize(hist1, hist1);
calcHist( &imghsv2, 1, channels, Mat(), hist2, 3, histsize, histRange, uniform, accumulate );
normalize(hist2, hist2);
Mat sig1,sig2;
int numrows=h_bins*s_bins*v_bins;
sig1=Mat(numrows,4,CV_32FC1,Scalar::all(0));
sig2=Mat(numrows,4,CV_32FC1,Scalar::all(0));
float value;
for(int h=0;h<h_bins;h++)
{
for(int s=0;s<s_bins;s++)
{
for(int v=0;v<v_bins;v++)
{
value=hist1.at<float>(h,s,v);
float* data1=sig1.ptr<float>(h*s*v);
data1[0]=value;
data1[1]=h;
data1[2]=s;
data1[3]=v;
value=hist2.at<float>(h,s,v);
float* data2=sig2.ptr<float>(h*s*v);
data2[0]=value;
data2[1]=h;
data2[2]=s;
data2[3]=v;
}
}
}
float emd_distance;
emd_distance=EMD(sig1,sig2,CV_DIST_L2);
emd_distance=1-emd_distance;
emd_distance=emd_distance*100;
return emd_distance;
}
这是先把rgb空间的图像转化到hsv空间,然后利用emd进行图像匹配的一个函数程序 有问题,希望指教啊 ,菜鸟一枚
0 0
- 基于vs2010和opencv的图像转化到hsv空间再emd匹配
- opencv之Rgb图像转化到HSV、Lab空间,对各通道的操作
- openCv RGB到HSV空间的学习
- 基于OpenCV的RGB和HSV色彩空间相互转换C++程序
- 基于OpenCV的RGB和HSV色彩空间相互转换C++程序
- 基于HSV 颜色空间的图像检索matlab代码
- Opencv的RGB到HSV颜色空间转换
- Opencv的RGB到HSV颜色空间转换
- 基于opencv和c++的图像处理:直方图匹配
- 基于opencv和c++的图像处理:直方图匹配
- Opencv映射到HSV颜色空间
- LIRe图像检索:RGB和HSV空间的颜色直方图
- Atitit rgb yuv hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别
- [opencv]模板匹配算法(单图像模板匹配和基于模板匹配的目标跟踪)
- [opencv]模板匹配算法(单图像模板匹配和基于模板匹配的目标跟踪)
- OpenCV-基于特征点的图像匹配
- 基于颜色分量HSV的图像分割:基于opencv的分割调试工具源码
- 有关opencv的学习(6)—图像的HSV色彩空间
- Eclipse中的快捷键
- 设计模式之部分-整体模式
- tomcat的配置和启动
- Linux学习记录--关机相关操作
- 垃圾回收器 类型
- 基于vs2010和opencv的图像转化到hsv空间再emd匹配
- Drawable资源--属性动画Property Animation资源
- java 资料收藏
- 隐私问题警告:此文档中包含宏
- 奇热网改名面包网
- linux 终端分屏命令vsp
- POJ 3252 Round Numbers(组合数学)
- 一个工科研究生毕业后的职业规划
- ios7 毛玻璃效果