资源简介

参考Seam Carving for Content-Aware Image Resizing论文实现代码。 对应blog:http://blog.csdn.net/u011630458/article/details/54171081

资源截图

代码片段和文件信息

#include                                                                                                                                          
#include     
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace cv; 
using namespace std;

Mat getTi(Mat &src){
    int i j;
Mat out = Mat::zeros(src.size() CV_32FC1);
 
    for(i=0;i        float *ptr1 = out.ptr(i);
        for(j=0;j            ptr1[j] = abs(src.at(ij)-src.at(i+1j))+abs(src.at(i j)-src.at(i j+1));
        }
ptr1[src.cols-1] = ptr1[src.cols-2];
    }
    float *ptr1 = out.ptr(src.rows-1);
    float *ptr2 = out.ptr(src.rows-2);
    for(j=0;j        ptr1[j] = ptr2[j];
}
    return out;
}

Mat getEnergy(Mat &srcXY Mat &tmpCircol){
int i j;
Mat out;
short k[3];
int index;

srcXY.copyTo(out);
    for(i=1;i
/*********第一列*****************/
k[1] =out.at(i-10);
k[2] =out.at(i-11);
if(k[1]>k[2]){
if(i>0){
out.at(i0) = srcXY.at(i0)+out.at(i-10);
}else{
out.at(i0) = srcXY.at(i0);
}
tmpCircol.at(i0) = 2;
}else{
if(i>0){
out.at(i0) = srcXY.at(i0)+out.at(i-11);
}else{
out.at(i0) = srcXY.at(i0);
}
tmpCircol.at(i0) = 1;
}

/***********中间列***************/
        for(j=1;j k[0] =out.at(i-1j-1);
k[1] =out.at(i-1j);
k[2] =out.at(i-1j+1);

index = 0;
if(k[1] index = 1;
}
if(k[2] index = 2; 
}
out.at(ij) = srcXY.at(ij)+out.at(i-1j+index-1);
tmpCircol.at(ij) = index;
        }

/*********最后一列*************/
k[0] =out.at(i-1srcXY.cols-2);
k[1] =out.at(i-1srcXY.cols-1);

if(k[0]>k[1]){
out.at(isrcXY.cols-1) = srcXY.at(isrcXY.cols-1)+out.at(i-1srcXY.cols-1);
tmpCircol.at(i srcXY.cols-1) = 1;
}else{
out.at(isrcXY.cols-1) = srcXY.at(isrcXY.cols-1)+out.at(i-1srcXY.cols-2);
tmpCircol.at(i srcXY.cols-1) = 0;
}
    }
return out;
}

void getCircolAddr(Mat &srcEnergy Mat &tmpCircol int *cirColAddr){
int i j index=0;
float tmpEnergyValue;

float *ptr1 = srcEnergy.ptr(srcEnergy.rows-1);
tmpEnergyValue = ptr1[0];
for(i=1;i if(ptr1[i] index = i;
tmpEnergyValue = ptr1[i];
}
}
for(i=srcEnergy.rows-1;i>=0;i--){
cirColAddr[i] = index;
index = index+tmpCircol.at(iindex)-1;
}
}

Mat getResultPic(Mat &src float scale){
    int i j k;

int circRow = src.rows - src.rows/scale;
int circCol = src.cols - src.cols/scale;
int cirColAddr[src.rows];
sh

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     252699  2017-01-06 13:44  1_test\myBin

    .....H.     20480  2017-01-06 13:44  1_test\.1.cpp.swp

     文件        299  2017-01-04 15:54  1_test\Makefile

    .......     18594  2017-01-06 13:43  1_test\out.jpg

     文件      44088  2017-01-06 13:42  1_test\pic.jpg

     文件       5115  2017-01-06 13:44  1_test\1.cpp

     目录          0  2017-01-06 13:44  1_test

----------- ---------  ---------- -----  ----

               341275                    7


评论

共有 条评论

相关资源