满意答案

#include "stdafx.h"

#include

#include

#include

#include

#include

#include

using namespace std;

const int Width = 1024;

const int Height = 1024;

int Lvalue[Width][Width];

uchar C(int x, int y, int d, IplImage * matchImage, IplImage * baseImage)

{

uchar * pMatchPixel = NULL;

uchar * pBasePixel = NULL;

uchar matchPixel = 0;

uchar basePixel =0;

uchar matchMax = 0;

uchar matchMin = 0;

uchar tempMatch1 = 0;

uchar tempMatch2 = 0;

uchar difPixel = 0;

if (x+d <= matchImage->width && x+d >= 0)

{

pMatchPixel = (uchar *)matchImage->imageData + y*matchImage->widthStep + (x+d);

matchPixel = *pMatchPixel;

pBasePixel= (uchar *)baseImage->imageData + y*baseImage->widthStep + x;

basePixel = *pBasePixel;

//匹配影像上的像素点与其左、右像素点的平均值,线性插值的方法

tempMatch1 = (*pMatchPixel +(*(pMatchPixel -1)))/2;

tempMatch2 = (*pMatchPixel +(*(pMatchPixel +1)))/2;

matchMax = max(max(tempMatch1,tempMatch2),matchPixel);

matchMin = min(min(tempMatch1,tempMatch2),matchPixel);

//赋予视差d时的匹配代价C

//BT法

difPixel = max(max(basePixel - matchMax, matchMin - basePixel),0);

//AD法

//difPixel = abs(basePixel - matchPixel);

return difPixel;

}

else

return 255;

}

int main()

{

IplImage * leftImage = cvLoadImage("headL.png",0);

IplImage * rightImage = cvLoadImage("headR.png",0);

int imageWidth = leftImage->width;

int imageHeight =leftImage->height;

int minLvalue = 1000;

int minL1 = 1000;

int minL2 = 1000;

int P1 = 2;

int P2 = 5;

int disparity= 0;

int minDis = 0;

int maxDis = 21;

int scale = 12;

unsigned char * pPixel = NULL;

#pragma region 实现横向DP(以右影像为准,0度方向)

IplImage * MyDPImage_0 = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1);

cvZero(MyDPImage_0);

int t3 = clock();

for (int i = 0; i < imageHeight;i++)

{

for (int j = 0; j

{

disparity = 0;

minL1 = 1000;

minL2 = 1000;

for (int d = minDis; d <= maxDis; d++)

{

//初始化为代价函数的值

Lvalue[j][d] = C(j, i, d, leftImage, rightImage);

if (j > 0)

{

minL1 = min(minL1, Lvalue[j-1][d]);

}

}

for (int d = minDis; d <= maxDis; d++)

{

if (j > 0)

{

minL2 = min(minL2, Lvalue[j-1][d]);

minL2 = min(minL2, (Lvalue[j-1][d+1] + P1));

minL2 = min(minL2, (Lvalue[j-1][d-1] + P1));

minL2 = min(minL2, (minL1 + P2));

Lvalue[j][d] = Lvalue[j][d] + (minL2 - minL1);

}

}

int max=Lvalue[j][0];

for(int d=minDis;d<=maxDis;++d)

{

if(Lvalue[j][d]

{

disparity=d;

max=Lvalue[j][d];

}

}

disparity=disparity*scale;

//生成视差图

pPixel = (uchar *)MyDPImage_0->imageData + i*MyDPImage_0->widthStep + j;

*pPixel =disparity;

}

}

int t4 = clock();

cout<

cvNamedWindow("MyDPImage_0", 1);

cvShowImage("MyDPImage_0", MyDPImage_0);

cvSaveImage("MyDPImage_0.jpg", MyDPImage_0);

#pragma endregion

#pragma region 实现横向DP(以左影像为准,0度方向)

IplImage * MyDPImage_0_L = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1);

cvZero(MyDPImage_0_L);

for (int i = 0; i < imageHeight;i++)

{

for (int j = 0; j

{

disparity = 0;

minL1 = 1000;

minL2 = 1000;

for (int d = minDis; d <= maxDis; d++)

{

//初始化为代价函数的值

Lvalue[j][d] = C(j, i, -d, rightImage, leftImage);

if (j > 0)

{

minL1 = min(minL1, Lvalue[j-1][d]);

}

}

for (int d = minDis; d <= maxDis; d++)

{

if (j > 0)

{

minL2 = min(minL2, Lvalue[j-1][d]);

minL2 = min(minL2, (Lvalue[j-1][d+1] + P1));

minL2 = min(minL2, (Lvalue[j-1][d-1] + P1));

minL2 = min(minL2, (minL1 + P2));

Lvalue[j][d] = Lvalue[j][d] + minL2 - minL1;

}

}

int max=Lvalue[j][0];

for(int d=0;d<=maxDis;++d)

{

if(Lvalue[j][d]

{

disparity=d;

max=Lvalue[j][d];

}

}

disparity = disparity * scale;

//生成视差图

pPixel = (uchar *)MyDPImage_0_L->imageData + i*MyDPImage_0_L->widthStep + j;

*pPixel = disparity;

}

}

cvNamedWindow("MyDPImage_0_L", 1);

cvShowImage("MyDPImage_0_L", MyDPImage_0_L);

cvSaveImage("MyDPImage_0_L.jpg", MyDPImage_0_L);

#pragma endregion

#pragma region 一致性检查

uchar * pLeftDepthPixel = NULL;

uchar * pRightDepthPixel = NULL;

uchar leftDepthPixel = 0;

uchar rightDepthPixel =0;

uchar difDepthPixel = 0;

IplImage * CheckImage_0 = cvCloneImage(MyDPImage_0);

cvZero(CheckImage_0);

for (int i = 0; i < imageHeight; i++)

{

for(int j = 0; j < imageWidth; j++)

{

pRightDepthPixel = (uchar *)MyDPImage_0->imageData + i*MyDPImage_0->widthStep + j;

rightDepthPixel = *pRightDepthPixel;

if(j + rightDepthPixel/scale < imageWidth)

{

pLeftDepthPixel = (uchar *)MyDPImage_0_L->imageData + i*MyDPImage_0_L->widthStep + j + rightDepthPixel/scale;

leftDepthPixel = *pLeftDepthPixel;

}

else

leftDepthPixel = 0;

difDepthPixel = abs((leftDepthPixel - rightDepthPixel)/scale);

pPixel = (uchar *)CheckImage_0->imageData + i * CheckImage_0->widthStep +j;

if (difDepthPixel <= 1)

{

*pPixel = rightDepthPixel;

}

else

{

//否则,当前像素的视差值为零

*pPixel = 0;

}

}

}

int lp,rp;

int lx,rx;

for(int i=0;i

{

for(int j=0;j

{

int tem = *((uchar *)CheckImage_0->imageData+i*CheckImage_0->widthStep + j);

if(tem==0)

{

lp = rp = 0;

lx = j;

rx = j;

if(lx-1<0)

lp= *((uchar *)CheckImage_0->imageData+i*CheckImage_0->widthStep + lx);

while((lp==0)&&( lx-1 >= 0 ))

lp = *((uchar *)CheckImage_0->imageData+i*CheckImage_0->widthStep + (--lx));

if(rx+1>=imageWidth)

rp = *((uchar *)CheckImage_0->imageData+i*CheckImage_0->widthStep + rx);

while((rp==0)&&(rx+1

rp = *((uchar *)CheckImage_0->imageData+i*CheckImage_0->widthStep +(++rx));

if (lp > rp)

{

*((uchar *)CheckImage_0->imageData+i*CheckImage_0->widthStep + j) = rp;

}

else

{

*((uchar *)CheckImage_0->imageData+i*CheckImage_0->widthStep + j) = lp;

}

}

}

}

cvSmooth(CheckImage_0,CheckImage_0,CV_MEDIAN,3,0,0);

cvNamedWindow("CheckImage_0", 1);

cvShowImage("CheckImage_0", CheckImage_0);

cvSaveImage("CheckImage_0.jpg", CheckImage_0);

#pragma endregion

cout << "完成!"<

cvWaitKey(0);

return 0;

}

00分享举报

php实现微信公众号半匹配,SGM半全局匹配算法求助相关推荐

  1. 微信公众号怎么申请-微信公众号使用教程1

    经常学员提到说老板要他去注册一个微信公众号. 由于以前只是通过微信看别人的公众号内容, 从来没想到自己还要去注册, 于是开始到网上搜索如何注册微信公众号的内容, 但是找了一大堆网页, 大部分是抄来抄去 ...

  2. 微信公众号网页授权,获取用户信息以及openid -- PHP后台

    微信公众号网页授权,获取用户信息以及openid 这几天做项目,想通过公众号的appid获取用户的openid就,然后在网上查资料,问朋友,最后找到了方法,就是这个网页授权. 起初一直很蒙,这个怎么弄 ...

  3. php实现微信公众号生成淘宝客推广海报(正则匹配淘宝联盟)

    现在很多人做淘宝客,包括我.做淘宝客一个月也可以赚个一两千零用钱,但是"淘宝联盟"APP生成的带二维码宣传图在微信是被屏蔽的,无法打开的! 例如: 所以很多做淘客的,开始开发自己的 ...

  4. php实现微信公众号生成淘宝客推广海报(正则匹配淘宝联盟) 1

    现在很多人做淘宝客,包括我.做淘宝客一个月也可以赚个一两千零用钱,但是"淘宝联盟"APP生成的带二维码宣传图在微信是被屏蔽的,无法打开的! 例如: 所以很多做淘客的,开始开发自己的 ...

  5. php 公众号验证回调方法_微信公众号关键词自动回复设置方法!

    什么是公众号关键词自动回复? 在微信公众号平台设置关键词自动回复,可以通过添加规则,关注/订阅的用户发送的消息内容如果是你设置的关键字,即可以实现自动回复预先设置好的内容. 关键字自动回复设置方法: ...

  6. 如何运营出一个有吸引力的微信公众号?

    ·注册 (定位 起名 头像) ·装修 (自动回复 模板 菜单) ·内容 (排版 写稿 工具) ·涨粉 ·变现 一 :注册 注册流程可自行百度.其实最重要的是定位,因为定位决定了你要在什么领域深耕,这是 ...

  7. 微信公众号基础功能搭建

    自动回复 在微信公众号后台首页左侧导航栏中找到功能.然后点击自动回复.自动回复包含被关注回复.收到消息回复和关键词回复三项内容. 被关注回复 用户关注公众号之后就会收到回复消息,消息形式包括文字.图片 ...

  8. 获取微信公众号文章封面图的技巧/网站

    直接使用访问:http://weixin.shareperform.com 以下主要是立项和事项的过程. 作为一个从Code转为营销策划的营销人,这周实力修一波操作. 一.需求 一个好的微信公众号推文 ...

  9. 微信公众号运营基础篇:排版、内容创作与引流篇

    微信公众号运营,其实就是通过多样的手段和技能在微信生态中可以更好的实现"用户获取"&"用户转化"以及"更好地实现已有客户的维系". ...

最新文章

  1. Citrx XenDesktop 7 实施三 配置XenServer
  2. scanf函数和printf函数
  3. 光伏价格趋势:中美因素汇聚 市场需求向7月延伸
  4. rails.vim环境安装(ubuntu)
  5. Python入门100题 | 第022题
  6. 实操《深入浅出React和Redux》第二期—Flux
  7. 03MFC的ODBC类简介
  8. 四、内存空间的编辑和ASSIC码
  9. 聊聊自己的高效学习方法~
  10. Linux进阶之日志管理
  11. struts2中struts.xml配置文件详解
  12. 全局唯一递增的id_细聊分布式ID生成方法
  13. 设计师都在用的素材网站,真的纯免费,还能商用
  14. 室内定位技术研发简介
  15. ACM赛后总结2018.09.23
  16. FreeRtos延时函数delay_us()
  17. JavaScript中splice的用法
  18. JS小知识,如何将 CSV 转换为 JSON 字符串
  19. 《吕鑫:VC++6.0就业培训宝典之MFC视频教程》学习笔记 -- 第五章对话框组合
  20. 开启Win7系统的Superfetch服务的方法

热门文章

  1. 老年人孤独感与精神病症状加剧有关
  2. 2018春节返程大数据让您出行更方便!
  3. 电动工具——电钻驱动方案设计
  4. ssm项目之生成验证码
  5. Limboy:自学 iOS 开发的一些经验
  6. 华为照片权限在哪里找_华为手机位置权限在哪里打开
  7. 美团笔试——空间回廊(c++)
  8. [Luogu P4921] [Luogu P4931] 情侣 给我烧了(加强版)
  9. 自动档11个禁忌动作 再好的变速箱开一年也报废!
  10. chrome浏览器解决跨域问题