在图形屏幕上寻找东西时,我目前对如何在图像中找到给定形状感到茫然.当然,图像中的形状可能具有不同的比例,并且将处于某个未知的x,y偏移处.
除了由不同比例产生的像素伪像之外,两个图像中也存在一点噪声,因此我需要一些容忍的搜索.
这是我要找的形象.

它应该显示在我的(双)屏幕缓冲区的屏幕转储中,大小约为3300 x 1200像素.我当然希望在浏览器窗口中找到它,但这些信息不是必需的.
这个练习的目的(到目前为止)是提出一个结果:
(x1,y1)到(x2,y2).我希望能够很好地防止缩放和抖动引起的噪声.另一方面,我可以排除一些常见的CV挑战,例如旋转或非刚性.那个框架形状很容易被人类大脑辨认出来,对于一个专用的软件来说有多难?这是一个Adobe Flash应用程序,直到最近我才认为从游戏GUI中感知图像应该很容易.
我正在寻找能够找到x和y平移的算法,在该平移处,针和干草堆之间可能发生最大重叠,并且如果可能的话,不必通过一系列可能的比例因子进行迭代.理想情况下,算法可以以与尺度无关的方式抽象出图像的"形状".
我已经阅读了一些关于傅里叶变换的有趣事情来完成类似的事情:给定相同比例的目标图像,FFT和一些矩阵数学产生了较大图像中与搜索模式相对应的点.但我没有理论背景将其付诸实践,也不知道这种方法是否能够优雅地处理规模问题.帮助将不胜感激!
技术:我使用Clojure/Java进行编程,但可以使用其他语言的算法.我想我应该能够与遵循C调用约定的库接口,但我更喜欢纯Java解决方案.
你可能能够理解我为什么不回避呈现实际图像.这只是一个愚蠢的游戏,但屏幕阅读它的任务比我想象的要困难得多.
我显然能够对我的屏幕缓冲区进行详尽的搜索,以查找构成我的图像的像素(不包括黑色),甚至可以在一分钟内运行.但我的目标是使用一种与形状相匹配的技术来发现木制框架,而不管缩放和抖动可能产生的差异.
事实上,抖动是我在这个项目中遇到的许多挫折之一.我一直在努力通过边缘提取来提取一些有用的矢量,但边缘非常难以捉摸,因为任何给定区域的像素都具有广泛不一致的颜色 - 因此很难从局部抖动伪像中分辨真实边缘.我不知道这么简单的游戏会产生难以让软件感知的图形.
在开始寻找功能之前,我应该从本地平均像素开始吗?我应该通过丢弃像素颜色值的最低有效位来减少颜色深度吗?
我正在尝试使用纯Java解决方案(实际上是用Clojure/Java混合编程)所以我并不喜欢opencv(使用C代码安装.DLL或.so).请不要担心我选择的语言,学习经验对我来说比表演更有趣.
opencv fft image-processing image-recognition computer-vision
这个问题是我最近一直在思考的问题.编程语言可以用该语言编写,作为第二种实现吗?例如Java.是否可以使用java编程语言重写java编程语言?
抱歉,如果这是一个愚蠢的问题,但我需要知道!
GF
我计划使用java/jsp安装在虚拟网络托管空间的Web应用程序
我非常了解tomcat,但我一直在阅读关于码头的小而快的
你从你对这两个体验的想法怎么想?
什么是更好的 ?
我将使用Nginx作为静态页面.
在"严肃"的Java GUI应用程序中,您将拥有许多GUI元素背后的模型:例如,DocumentModel支持a JEditorPane或ListModel后面的JList.
我们总是被告知不要从Swing工作线程外部进行GUI更改,并给出SwingUtilities.invoke...()解决方法.好吧,我可以忍受!当直接更改GUI组件的属性时,它当然是必要的(并且运行良好).
理想情况下,我的大多数GUI可见更改都是模型,而不是JComponents.但是因为它们是GUI可见的,它们是否"算作"GUI变化?即改变事件和听众提供必要的解耦,还是需要包装模型更改invoke...()?
对于Swing专业人士来说可能是老帽子,但是我无法找到任何明确说明这种或那种方式的参考文献.
每当我在eclipse中运行我的应用程序时,它就会开始构建,然后运行。由于我要进行数千个课程,因此每次构建都花费太多时间。我能知道原因吗,我该怎么做才能避免它?
在(K)Ubuntu Linux 9.10下运行Eclipse 3.5(= Galileo).具有HTTP代理的企业环境.
我有我的Preferences | General | Network Connections所有设置HTTP,主机,端口Authentication required和凭据.
Eclipse在Eclipse启动时要求我输入主密码.所以我提供了我能想到的所有授权,但似乎还不够.
代理访问正常工作(并且没有烦恼),例如来自Internet的软件更新和SVN更新,但显然无法进行XML DTD验证.Eclipse会弹出一个对话框,显示我的代理主机并询问代理密码.我希望它能从我设置的代理凭证中获取此信息.这种情况经常发生,因此对我来说非常烦人.有什么办法可以减轻这种情况吗?
我想在数据结构中预先存储一堆函数调用,然后在另一个函数中评估/执行它们.
这对于在命名空间级别定义的函数按计划工作defn(即使函数定义在我创建数据结构之后),但不适用于函数定义的函数let [name (fn或letfn函数内部的函数.
这是我的小型自包含示例:
(def todoA '(funcA))
(def todoB '(funcB))
(def todoC '(funcC))
(def todoD '(funcD)) ; unused
(defn funcA [] (println "hello funcA!"))
(declare funcB funcC)
(defn runit []
(let [funcB (fn [] (println "hello funcB"))]
(letfn [(funcC [] (println "hello funcC!"))]
(funcA) ; OK
(eval todoA) ; OK
(funcB) ; OK
(eval todoB) ; "Unable to resolve symbol: funcB in this context" at line 2
(funcC) ; OK
(eval todoC) ; …Run Code Online (Sandbox Code Playgroud) 我是一位经验丰富的开发人员,但不是Perl.我通常学习Perl来破解脚本,然后我再次忘记它直到下一次.因此,我正在寻找专业人士的建议.
这一次,我正在构建一系列数据分析脚本.大致简化,程序结构如下:
01 my $config_var = 999;
03 my $result_var = 0;
05 foreach my $file (@files) {
06 open(my $fh, $file);
07 while (<$fh>) {
08 &analyzeLine($_);
09 }
10 }
12 print "$result_var\n";
14 sub analyzeLine ($) {
15 my $line = shift(@_);
16 $result_var = $result_var + calculatedStuff;
17 }
Run Code Online (Sandbox Code Playgroud)
在现实生活中,有大约六个不同的config_vars和result_vars.
这些脚本主要区别于分配给config_vars 的值.主循环在每种情况下analyzeLine()都是相同的,并且将大致相同但可能有一些小的变化.
我可以通过制作此代码的N份副本来实现我的目的,并且在这里和那里进行小的改动; 但这严重违反了各种良好设计规则.理想情况下,我想编写一系列脚本,其中只包含一组config var初始化,然后是
do theCommonStuff;
Run Code Online (Sandbox Code Playgroud)
请注意,config_var(和它的兄弟姐妹)必须可用于公共代码,必须result_var和它的外观相似,在其analyzeLine()上进行一些计算.
我应该将"常用"代码打包到模块中吗?创建一个类?使用全局变量?
虽然不完全是代码高尔夫,但我正在寻找一个简单,紧凑的解决方案,这将允许我干,只为差异编写代码.我想我宁愿不从包含所有配置的巨大表中驱动代码,当然也不会使它适应使用数据库.
期待您的建议,谢谢!
更新 …
我有以下功能
public static Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.parse(date);
}
Run Code Online (Sandbox Code Playgroud)
我在我的代码中使用如下
Calendar eDate = Calendar.getInstance();
eDate.add(Calendar.DAY_OF_MONTH,10);
Date date = null;
try {
date = parseDate(eDate.getTime().toString(),"yyyy-MM-dd hh-mm-ss");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但它正在投掷 -
java.text.ParseException: Unparseable date
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?
我的表单上有SpeedButton,我希望它打开带有相关程序的avi文件.我试过Windows.winexec,但它似乎没有用.