资源简介
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
相关资源
- c++获得硬盘信息
- 微软编程标准规范(含C++/VC/C#)
- 大学最新C++题库及答案
- LeetCode答案解析C++版本
- VC++6.0字符串小游戏扫雷
- C++ QQ农场源代码程序
- C++编程练习题大全(带答案)
- 万有引力搜索算法 c++代码
- c++写的一个简单的银行管理系统
- 模板:基于OpenCV的车辆速度检测c++
- 2013最新C++远程控制木马源代码
- VC++ 数字图像处理典型算法及实现 源
- LeetCode题解高清完整c++版
- C++版的rinex文件读取源代码
- 一个可以自动点广告小程序VisualC++编
- qgis中文教程
- C\\C++ 任意(281016)进制转换为(281
- Visual+C++与SQL+Server开发仓库管理系统
- C++编写128位整数运算源码
- LeetCode题解 C/C++版
- 用C++实现点云显示
- 网上交易平台C++,mysql课程设计
- 05年毕业设计-图像处理软件及源代码
- json字符串转换c++类对象
- 数字水印系统c++实现
- rocketmq-client-cpp vs2015 x64 Debug.rar
- Storage and Buffer Manager
- C++模拟磁盘文件系统
- 光线追踪算法实现C++实现
-
《Inside The C++ ob
ject Model》英文pdf
评论
共有 条评论