资源简介

分别用了基于梯度图和Saliency算法的显著度图计算方法,以水平和垂直两种方式简单地压缩图片。实现了有关动态规划算法

资源截图

代码片段和文件信息

#include“highgui.h“
#include“cv.h“
#include“stdio.h“
#include“Saliency.h“
using namespace cv;

#define delNUM 50
//锐化滤波得到显著图
Mat getSrcEnergy(Mat image){
Mat image_gray;
//均值滤波
Mat mask1 = (Mat_(3 3) << 0 0 0 0 1 -1 0 0 0);
Mat mask2 = (Mat_(3 3) << 0 0 0 0 1 0 0 -1 0);
Mat result(image.rows image.cols CV_32F Scalar(0));
Mat result1(image.rows image.cols CV_32F Scalar(0));
Mat result2(image.rows image.cols CV_32F Scalar(0));

cvtColor(image image_gray CV_BGR2GRAY);

filter2D(image_gray result1 result1.depth() mask1);
filter2D(image_gray result2 result2.depth() mask2);
add(abs(result1) abs(result2) result);
return result;
}
//Saliency算法得到显著图
Mat getEnergy(Mat image){
Saliency sal;
vector salmap(0);
vector inputImg;
IplImage imgTmp = image;
IplImage* img = cvCloneImage(&imgTmp);

for (int h = 0; h < img->height; h++){
unsigned char*p = (unsigned char*)img->imageData + h*img->widthStep;
for (int w = 0; w < img->width; w++){
unsigned int t = 0;
t += *p++;
t <<= 8;
t += *p++;
t <<= 8;
t += *p++;
inputImg.push_back(t);
}
}

sal.GetSaliencyMap(inputImg img->width img->height salmap);

int index = 0;
IplImage* imageOut = cvCreateImage(cvGetSize(img) IPL_DEPTH_64F 1);
IplImage* ori = cvCreateImage(cvGetSize(img) IPL_DEPTH_32F 1);
for (int h = 0; h < imageOut->height; h++){
double *p = (double*)(imageOut->imageData + h*imageOut->widthStep);
for (int w = 0; w < imageOut->width; w++){
*p++ = salmap[index++];
}
}
cvConvertScale(imageOut ori);
Mat imgMat(ori 1);
cvReleaseImage(&img);
cvReleaseImage(&imageOut);

return imgMat;
}
//累计能量,范围为3个
void calculateEnergy3(Mat imageMat &EnergyMatMat &trace){
image.copyTo(EnergyMat);

for (int i = 1; i < image.rows; i++){
//第一列的能量累计
if (EnergyMat.at(i - 1 0) <= EnergyMat.at(i - 1 1)){
EnergyMat.at(i 0) = image.at(i 0) + EnergyMat.at(i - 1 0);
trace.at(i 0) = 0; //正上方的是0 
}
else{
EnergyMat.at(i 0) = image.at(i 0) + EnergyMat.at(i - 1 1);
trace.at(i 0) = 1;  //右上方的是1
}
//中间列的能量累计
for (int j = 1; j < image.cols - 1; j++){
float en[3] min;
int index = -1;
en[0] = EnergyMat.at(i - 1 j - 1);
en[1] = EnergyMat.at(i - 1 j);
en[2] = EnergyMat.at(i - 1 j + 1);
min = en[0];
for (int k = 1; k < 3; k++){
if (en[k] < min){
min = en[k];
index = k - 1;
}
}
EnergyMat.at(i j) = image.at(i j) + EnergyMat.at(i - 1 j + index);
trace.at(i j) = index;
}
//最后一列的能量累计
if (EnergyMat.at(i - 1 image.cols - 1) <= EnergyMat.at(i - 1 image.cols - 2)){
EnergyMat.at(i image.cols - 1) = image.at(i image.cols - 1) + EnergyMat.at(i - 1 image.cols - 1);
tra

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-11-14 20:09  final\
     目录           0  2016-10-30 16:29  final\Debug\
     文件      112640  2016-10-30 08:29  final\Debug\final.exe
     文件      576920  2016-10-30 08:29  final\Debug\final.ilk
     文件     1765376  2016-10-30 08:29  final\Debug\final.pdb
     目录           0  2016-11-04 10:21  final\final\
     文件    15466496  2016-11-14 20:09  final\final.sdf
     文件         961  2016-10-30 08:25  final\final.sln
     文件       25088  2016-11-14 20:09  final\final.v12.suo
     文件       52224  2016-10-30 10:12  final\final\1.jpg
     文件       75714  2016-10-30 15:10  final\final\2.jpg
     文件       92352  2016-10-30 15:09  final\final\3.jpg
     文件      258009  2016-10-30 15:10  final\final\4.jpg
     文件      204622  2016-10-30 15:10  final\final\5.jpg
     文件       63984  2016-10-30 15:10  final\final\6.jpg
     文件       95538  2016-10-30 15:10  final\final\7.jpg
     文件      115855  2016-10-30 15:10  final\final\8.jpg
     文件       70384  2016-10-30 15:10  final\final\9.jpg
     目录           0  2016-10-30 16:29  final\final\Debug\
     文件        2173  2016-10-30 08:29  final\final\Debug\final.log
     目录           0  2016-10-30 16:29  final\final\Debug\final.tlog\
     文件         616  2016-10-30 08:29  final\final\Debug\final.tlog\cl.command.1.tlog
     文件       12968  2016-10-30 08:29  final\final\Debug\final.tlog\CL.read.1.tlog
     文件         412  2016-10-30 08:29  final\final\Debug\final.tlog\CL.write.1.tlog
     文件         171  2016-10-30 08:29  final\final\Debug\final.tlog\final.lastbuildstate
     文件        2796  2016-10-30 08:29  final\final\Debug\final.tlog\link.command.1.tlog
     文件        6484  2016-10-30 08:29  final\final\Debug\final.tlog\link.read.1.tlog
     文件         390  2016-10-30 08:29  final\final\Debug\final.tlog\link.write.1.tlog
     文件      417697  2016-10-30 08:29  final\final\Debug\main.obj
     文件      617472  2016-10-30 08:29  final\final\Debug\vc120.idb
     文件     1257472  2016-10-30 08:29  final\final\Debug\vc120.pdb
............此处省略26个文件信息

评论

共有 条评论