被C#虐了好多天了,小女子求教各位大神,在C#中如何实现将两张t图片相减,并将差异显示出来?

问题描述

要作一个识别船舶尺寸的项目,需要从两张图片中将船舶识别出来,两张图片拍摄角度相同,一张是有船的,一张是没有船的,需要将两张图片相减把航道背景消除,只剩下船体,要怎样操作啊?急求帮助啊

解决方案

解决方案二:
说起来简单做起来难,这需要人工智能算法吧
解决方案三:
这个说说容易,电脑完成,有难度呀!!智能性要求太高,帮顶一下吧
解决方案四:
这个很复杂。涉及到如何判断船体轮廓,如何判断光明暗不同时的像素颜色。如何去除噪点等等等等很高深的算法。
解决方案五:
提供个思路,你试下Bitmap.GetPixel(x,y)这个函数,把两张图片的点一个一个比较,如果相同的就把这个点变为白色,如果不同的话,就把这个点留下来,只是这样想,没经过实践,楼主可以试试
解决方案六:
我只是帮顶一下
解决方案七:
这个东西不要在这里问,应该找专门搞图像识别算法的人去弄
解决方案八:
网上找下Emgu(或者OpenCV也行)相关的文章,里边有你想要的图像相减算法Emgu.CV.Image<Gray,byte>Image1;Emgu.CV.Image<Gray,byte>Image2;Emgu.CV.Image<Gray,byte>Image3=Image1.AbsDiff(Image2);(Image3是Image1和Image2相减后的图像,一般用于消除背景)
解决方案九:
图片的像素值相减呗,然后判断像素值大于一定值的就行了,多看看图像识别
解决方案十:
你为什么要申请这么多ID来问问题而且每次问题的标题都有"小女子"3个字......
解决方案十一:
我好冤啊,我第一次在这里问问题,还不知道怎么玩这个论坛呢引用9楼diaodiaop的回复:

你为什么要申请这么多ID来问问题而且每次问题的标题都有"小女子"3个字......

解决方案十二:
引用7楼ssqxnn1000的回复:

网上找下Emgu(或者OpenCV也行)相关的文章,里边有你想要的图像相减算法Emgu.CV.Image<Gray,byte>Image1;Emgu.CV.Image<Gray,byte>Image2;Emgu.CV.Image<Gray,byte>Image3=Image1.AbsDiff(Image2);(Image3是Image1和Image2相减后的图像,一般用于消除背景)

那是不是需要把OpenCV添加到项目里边,然后再将其引用啊?我正在下载Opencv
解决方案十三:
引用1楼tcmakebest的回复:

说起来简单做起来难,这需要人工智能算法吧

就感觉想想的话就是两个图片相减的问题,可是就是一直无法实现
解决方案十四:
我觉得你先用PS抠图,再用代码处理,会简单的多
解决方案十五:
这个要直接程序处理,难度很高。这个收到海况、天气、光线明暗条件因素影响太多了。
解决方案:
引用13楼Z65443344的回复:

我觉得你先用PS抠图,再用代码处理,会简单的多

因为需要实现智能化的船舶过闸检测,所以先用PS的话会略显复杂
解决方案:
matbal有专门进行图像识别的函数,以前我师弟做图像配对的时候,看见用过,就是速度太慢度太慢
解决方案:
我倒是觉得你不要采取这种方式来做。通过照片分析来获取船只的信息,这个项目做出来都可以卖给马来西亚去找MH370了。换种思路:如果你只是单纯想获取船只的长度,采取传感器来做就简单多了。船只通过船闸一定是排队通过的,在进入船闸处按照一定距离安装一系列激光发射接收装置,船头遮蔽激光时开始计时计数,可以测算出来船只通过的速度和通过时间。然后解个一元一次方程就能算出来船只长度了。这样就只是写个上位机程序就可以解决问题了。
解决方案:
17楼正解,顶一个.这个算法,专业性太强了,根本就不是csdn这种地方可以解决的.
解决方案:
理论上先黑白化,然后降噪,然后异或或者直接异或(实际上就是把A图当B图的mask),在降噪(降噪是必须,即使是你描述滴情况,不同天气,色温或者小型目标都容易引起噪声)另外:实际上很少很少控制系统是用图像识别滴,多数情况下都是采用物理传感器,无线电,雷达,gps等手段完成滴
解决方案:
另外在顺带说一句,其实上航道上滴目标相当多,很多情况都是一个两船前后并行滴,你用图片识别很难识别出就像上公汽,一堆人挤在一块或者一个大人背后躲着两小孩,单纯用图片识别很难搞
解决方案:
引用12楼u014119902的回复:

Quote: 引用1楼tcmakebest的回复:
说起来简单做起来难,这需要人工智能算法吧

就感觉想想的话就是两个图片相减的问题,可是就是一直无法实现

尤其是两张图片视角不一样的情况。。。
解决方案:
这么弱智的问题,你用C#做这个?留下邮箱,给你个以前导师教学用的C++的,完全满足你的需求。
解决方案:
引用22楼flllx_yisheng的回复:

这么弱智的问题,你用C#做这个?留下邮箱,给你个以前导师教学用的C++的,完全满足你的需求。

892578755@qq.com
解决方案:

解决方案:
问题与语言C#没有关系,用其它语言也肯定被虐。图片就算是同一角度拍的,得到的颜色肯定是有差别的,程序处理有一定的难度。需要专门的图形图像处理算法才行!
解决方案:
引用25楼91program的回复:

问题与语言C#没有关系,用其它语言也肯定被虐。

严重同意
解决方案:
引用4楼g767160的回复:

提供个思路,你试下Bitmap.GetPixel(x,y)这个函数,把两张图片的点一个一个比较,如果相同的就把这个点变为白色,如果不同的话,就把这个点留下来,只是这样想,没经过实践,楼主可以试试

这个思路不错,前提是这两个图片都是在理想条件下拍摄的
解决方案:
有点难度,学习一下
解决方案:
直接相减为什么不行?你不把图贴上来还真不好做分析
解决方案:
尝试在C#中调用Opencv,还在尝试中,先谢谢了,我会持续更新进展
解决方案:
不使用opencv的思路:1保证角度完全一致,保证拍摄的镜头没有动过2将两幅图片的色深降低,尤其不要用真彩色3降低后就可以用像素对比的方法,去掉相同的像素即可,比如将这些像素填写为白色总体来说就是牺牲色深,使颜色可对比ps:如果有水又有波涛的话会比较不好办,可以先把水那一块滤除,也是采用颜色在某一范围的判断方法
解决方案:
用灰度算法吧!
解决方案:
相当困难的问题,支持一下。
解决方案:
在船的背景前面挂一大块白布,完美解决...
解决方案:
引用23楼u014119902的回复:

Quote: 引用22楼flllx_yisheng的回复:
这么弱智的问题,你用C#做这个?留下邮箱,给你个以前导师教学用的C++的,完全满足你的需求。

892578755@qq.com

QQ暴露了
解决方案:
引用15楼u014119902的回复:

Quote: 引用13楼Z65443344的回复:
我觉得你先用PS抠图,再用代码处理,会简单的多

因为需要实现智能化的船舶过闸检测,所以先用PS的话会略显复杂

为啥不弄个传感器
解决方案:
你这不是被C#虐呀,是被图像识别虐
解决方案:
该回复于2014-04-22 12:07:20被版主删除
解决方案:
引用30楼u014119902的回复:

尝试在C#中调用Opencv,还在尝试中,先谢谢了,我会持续更新进展

是emgucv吧,Opencv不是c#的
解决方案:
坐等大神完美解决,嘿嘿
解决方案:
我可以再换个思路么,全世界能有多少条备案的大船啊?只要你能识别出这条船的id,比如船号啥的,直接数据库读取尺寸不就成了?
解决方案:
图像识别现成的函数库很多,matlab语言做比较容易因为有很多支持了,c的话麻烦点,c#更麻烦,但是归跟结底,你不会打算自己从头写图像识别的算法,对吧?你不会正好在做毕业论文吧?
解决方案:
不懂,帮顶
解决方案:
看标题就知道该主题要火
解决方案:
这个问题有难度啊,支持你一下吧
解决方案:
你先别管C#怎么实现,单单算法你就可以想很久了,需要很智能的,计算机模式识别基础要好
解决方案:
引用27楼FoxDave的回复:

Quote: 引用4楼g767160的回复:
提供个思路,你试下Bitmap.GetPixel(x,y)这个函数,把两张图片的点一个一个比较,如果相同的就把这个点变为白色,如果不同的话,就把这个点留下来,只是这样想,没经过实践,楼主可以试试

这个思路不错,前提是这两个图片都是在理想条件下拍摄的

理想条件,话说,我觉得比较像素点,至少要在同一时间同一个角度来拍摄,识别率才高。不然,天气,时间,亮度都会出现问题。
解决方案:
这个问题一篇博士论文都可以了,图像滤波和识别涉及较多算法
解决方案:
首先把图片二值化,二值化需要一个黑与白临界像素值,这个临界像素值需要对大量图片做分析得出一个合适的值。如果这个临界值做得好,最终可得出船体是黑的其他为白的一张图片
解决方案:
你来就是虐我们的

时间: 2025-01-29 21:55:35

被C#虐了好多天了,小女子求教各位大神,在C#中如何实现将两张t图片相减,并将差异显示出来?的相关文章

小女子跪求大神帮忙~关于json字符串转换成实体类。。

问题描述 求实例比如说我现在的json字符串是[{"name":"aa","passwd":"bb"},{"name":"aa2","passwd":"bb2"},...],我需要把它转存到javaBean中,但是我在并不知道接受的JSON字符串的内容中name和passwd的先后位置(因为我做的是socket传输json格式的数据,并且其中的数据

图片-初学小女子求问一个关于矩阵,中值滤波题目

问题描述 初学小女子求问一个关于矩阵,中值滤波题目 目前用的是VS2010,所以希望是C语言~多谢喇 望各方大神快快冒泡,解小女子一惑o(^▽^)o 解决方案 不是告诉你算法了么?就是用某个点周围8个点按照第二个矩阵的泉重求平均数,作为滤波后的值. 解决方案二: 打个比方,第二排第二个元素158,滤波以后等于多少呢? 我们看它和它四周的9个元素,是不是 160 163 167 159 158 155 153 155 157 和Mask每一项相乘相加再除以16 等于 (160*1+163*2+16

cocos2d x-cocos2d-X关于监听事件的一个小问题(希望大神帮助)

问题描述 cocos2d-X关于监听事件的一个小问题(希望大神帮助) _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, sprite1); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), sprite2); 这个我对两个精灵做事件添加,为什么第二个精灵注册的时候为什么是调用这个listener->

请教大神,android中我需要在自定义控件中绘制一个透明的小三角行?

问题描述 请教大神,android中我需要在自定义控件中绘制一个透明的小三角行? 请教大神,android中我需要在自定义控件中绘制一个透明的小三角行,比如我需要在LinearLayout的底部绘制一个透明背景小三角,该怎么绘制呢? 我在绘制的时候将设置成透明背景,绘制小三角不显示,必须要给他设置一个背景才会显示,纠结啊 解决方案 可以定义一个path吧,连接成一个三角形,然后画出来 解决方案二: 让UI给你做一个三角形的透明图 设为背景 解决方案三: path连接成个三角形的话,如果这个自定义

java-JAVA初学者的一个小问题,求大神解答

问题描述 JAVA初学者的一个小问题,求大神解答 执行完System.out.println("lime");这句后为什么没有换行? 新人,望大神勿喷 解决方案 正确的输出结果就是: lime grape 你说的这个正确答案:limegrape 是不是在哪个书面资料上的啊, 如果自己的结果跟书面上的不同的话,自己动手写一下就是了,书上有很多不对的地方 如果不想换行的话就用System.out.print("lime"); 解决方案二: 你这正确答案不应该是 : li

c++-pta:大炮打蚊子,有点小bug,求大神帮忙解决一下

问题描述 pta:大炮打蚊子,有点小bug,求大神帮忙解决一下 现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格.向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意: O OXO O 其中,X为炮弹落点中心,O为紧靠中心的四个有杀伤力的格子范围.若蚊子被炮弹命中(位于X格),一击毙命,若仅被杀伤(位于O格),则损失一半的生命力.也就是说,一次命中或者两次杀伤均可消灭蚊子.现在给出蚊子的分布情况以及连续k发炮弹的落点,给出每炮消灭的蚊子数. 输入格式: 第一行为两个不

虚拟拆卸-毕业设计的。。。问个关于cult3d的小问题 请各位大神不吝赐教!

问题描述 毕业设计的...问个关于cult3d的小问题 请各位大神不吝赐教! 如图所示 我设置了8个"键盘按键按下" ,"拆卸1"对应摁下数字键1,"拆卸2"对应摁下2...以此类推,所有的动作都是"平移XYZ". 我所希望实现的正确拆卸顺序是1-2-3-...-8,必须按照这个顺序. 假设如果顺序串位了,比如本应该先摁1,完成了"拆卸1"动作后再摁2,才能做"拆卸2"动作:但现在先摁下

c语言-C语言的一个小问题,求大神

问题描述 C语言的一个小问题,求大神 #include int main() { float c,f; scanf("%f",&f); c=(5.0/9)*(f-32); printf("摄氏度为%fn",c); return 0; } 语句c=(5.0/9)*(f-32); 中的5.0换成5的话输出结果就错了,这是为什么呀,求大神指点 解决方案 如果除数是5的话,那么/就是整除的意思. 你也可以写成 5f,让它被视作是float 解决方案二: 5/9 取整

c语言-本人编程初学,刚刚编写了一个整数的比较大小的小程序,希望大神帮我看看

问题描述 本人编程初学,刚刚编写了一个整数的比较大小的小程序,希望大神帮我看看 希望大神帮我看一下是不是可以比较整数的所有情况,而且此算法有点复杂,可以怎样简化 #include int main() { int compare(int a,int b); int x,y,c,g; printf("请输入两个整形数用于比较大小:n"); scanf("%d,%d",&x,&y); c=compare(x,y); if(c==g) printf(&qu