• 大小: 1.21MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-29
  • 语言: C/C++
  • 标签: Seam  Carving  c++  

资源简介

SeamCarving的C++实现代码,使用opencv库。包含完整项目工程及测试图像,可直接使用

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define NUM 220

void calculateEnergy(cv::Mat& srcMatcv::Mat& dstMatcv::Mat& traceMat)
{
srcMat.copyTo(dstMat);   //不用“=”,防止两个矩阵指向的都是同一个矩阵,现在只需要传里面的数值

for (int i = 1;i < srcMat.rows;i++)  //从第2行开始计算
{
//第一列
if (dstMat.at(i-10) <= dstMat.at(i-11))
{
dstMat.at(i0) = srcMat.at(i0) + dstMat.at(i-10);
traceMat.at(i0) = 1; //traceMat记录当前位置的上一行应取那个位置,上左为0,上中1,上右为2
}
else
{
dstMat.at(i0) = srcMat.at(i0) + dstMat.at(i-11);
traceMat.at(i0) = 2;
}

//中间列
for (int j = 1;j < srcMat.cols-1;j++)
{
float k[3];
k[0] = dstMat.at(i-1j-1);
k[1] = dstMat.at(i-1j);
k[2] = dstMat.at(i-1j+1);

int index = 0;
if (k[1] < k[0])
index = 1;
if (k[2] < k[index])
index = 2; 
dstMat.at(ij) = srcMat.at(ij) + dstMat.at(i-1j-1+index);
traceMat.at(ij) = index;

}

//最后一列
if (dstMat.at(i-1srcMat.cols-1) <= dstMat.at(i-1srcMat.cols-2))
{
dstMat.at(isrcMat.cols-1) = srcMat.at(isrcMat.cols-1) + dstMat.at(i-1srcMat.cols-1);
traceMat.at(isrcMat.cols-1) = 1; 
}
else
{
dstMat.at(isrcMat.cols-1) = srcMat.at(isrcMat.cols-1) + dstMat.at(i-1srcMat.cols-2);
traceMat.at(isrcMat.cols-1) = 0;
}

}
}

// 找出最小能量线
void getMinEnergyTrace(const cv::Mat& energyMatconst cv::Mat& traceMatcv::Mat& minTrace)
{
int row = energyMat.rows - 1;// 取的是energyMat最后一行的数据,所以行标是rows-1

int index = 0; // 保存的是最小那条轨迹的最下面点在图像中的列标

// 获得index,即最后那行最小值的位置
for (int i = 1;i < energyMat.cols;i++)
{
if (energyMat.at(rowi) < energyMat.at(rowindex))
{
index = i;
} // end if
} // end for i = ...

// 以下根据traceMat,得到minTrace,minTrace是多行一列矩阵
{
minTrace.at(row0) = index;

int tmpIndex = index;

for (int i = row;i > 0;i--)
{
int temp = traceMat.at(itmpIndex);// 当前位置traceMat所存的值

if (temp == 0) // 往左走
{
tmpIndex = tmpIndex - 1;
}
else if (temp == 2) // 往右走
{
tmpIndex = tmpIndex + 1;
} // 如果temp = 1,则往正上走,tmpIndex不需要做修改

minTrace.at(i-10) = tmpIndex;
}
}
}

// 删掉一列
void delOneCol(cv::Mat& srcMatcv::Mat& dstMatcv::Mat& minTracecv::Mat& beDeletedLine)
{

for (int i = 0;i < dstMat.rows;i++)
{
int k = minTrace.at(i0);

for (int j = 0;j < k;j++)
{
dstMat.at(ij)[0] = srcMat.at(ij)[0];
dstMat.at(ij)[1] = srcMat.at(ij)[1];
dstMat.at(ij)[2] = srcMat.at(ij)[2];
}
for (int j = k;j < dstMat.cols-1;j++)
{
if (j == dstMat.cols-1)
{
int a = 1;
}
dstMat.at(ij)[0] = srcMat.at(ij+1)[0];
dstMat.at(ij)[1] = srcMa

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

     文件     157565  2011-12-11 18:55  代码\SeamCarving\1.jpg

     文件       8410  2011-12-12 13:18  代码\SeamCarving\Debug\BuildLog.htm

     文件     198279  2011-12-12 13:18  代码\SeamCarving\Debug\main.obj

     文件         65  2011-12-12 13:13  代码\SeamCarving\Debug\mt.dep

     文件        621  2011-12-12 13:13  代码\SeamCarving\Debug\SeamCarving.exe.intermediate.manifest

     文件     814080  2011-12-12 13:18  代码\SeamCarving\Debug\vc90.idb

     文件     921600  2011-12-12 13:18  代码\SeamCarving\Debug\vc90.pdb

     文件       7911  2011-12-29 13:02  代码\SeamCarving\main.cpp

     文件       8854  2011-12-29 13:02  代码\SeamCarving\Release\BuildLog.htm

     文件    2202240  2011-12-29 13:02  代码\SeamCarving\Release\main.obj

     文件         65  2011-12-29 13:02  代码\SeamCarving\Release\mt.dep

     文件        616  2011-12-29 13:02  代码\SeamCarving\Release\SeamCarving.exe.intermediate.manifest

     文件     527360  2011-12-29 13:02  代码\SeamCarving\Release\vc90.idb

     文件     749568  2011-12-29 13:02  代码\SeamCarving\Release\vc90.pdb

     文件       3866  2011-12-10 17:03  代码\SeamCarving\SeamCarving.vcproj

     文件       1409  2012-01-06 12:21  代码\SeamCarving\SeamCarving.vcproj.lcy-PC.lcy.user

     文件     131068  2011-12-11 19:04  代码\SeamCarving\原图.jpg

     文件     108472  2011-12-11 18:59  代码\SeamCarving\缩小.jpg

     文件        899  2011-12-29 13:02  代码\SeamCarving.sln

    ..A..H.     30208  2012-01-06 12:21  代码\SeamCarving.suo

     目录          0  2012-01-05 21:33  代码\SeamCarving\Debug

     目录          0  2012-01-05 21:33  代码\SeamCarving\Release

     目录          0  2012-01-05 21:36  代码\SeamCarving

     目录          0  2012-04-23 21:21  代码

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

              5873156                    24


评论

共有 条评论