我想从这种图片中捕捉数字.
我尝试从以下链接进行多尺度匹配.
http://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv/
我想知道的只是红色数字.但问题是,openCV识别/匹配模板的红色数字模糊.是否有其他可能的方法来检测黑色背景上的这个红色数字?
我想知道是否有办法将布尔值转换为int而不使用if语句(以免破坏管道).例如,我可以写
int boolToInt( boolean b ){
if ( b )
return 1
return 0
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有办法在没有if语句的情况下完成它,就像Python一样
bool = True
num = 1 * ( bool )
Run Code Online (Sandbox Code Playgroud)
我也认为你可以做到
boolean bool = True;
int myint = Boolean.valueOf( bool ).compareTo( false );
Run Code Online (Sandbox Code Playgroud)
但是这会创建一个额外的对象,所以它真的很浪费,我发现它甚至比if语句方式更慢(这不一定是低效的,只有一个弱点).
使用__iadd__
符号将字典添加到列表似乎将字典的键添加为列表中的元素。为什么?例如
a = []
b = {'hello':'world'}
a += b
>> a now stores ['hello']
Run Code Online (Sandbox Code Playgroud)
集合上的plus-equals 文档对我来说并不意味着这应该发生:
例如,要执行语句 x += y,其中 x 是具有
__iadd__
() 方法的类的实例,x.__iadd__(y)
被调用。如果 x 是一个没有定义__iadd__()
方法的类的实例,x.__add__(y)
并且y.__radd__(x)
被考虑,就像评估x + y
但是,从逻辑上讲,两者
a + b # 类型错误异常
和
b + a # 类型错误异常
没有定义。此外,b+=a
也会引发 TypeError。我在源代码中没有看到任何可以解释事物的特殊实现,但我不能 100% 确定在哪里查看。
我发现的关于 SO 的最接近的问题是this one,询问字典上的 += ,但这只是询问自身的数据结构。这个有一个关于列表自添加的有希望的标题,但它声称“ __add__
”是在幕后应用的,不应该在列表和字典之间定义。
我最好的猜测是__iadd__
调用了在此处定义的 …
我试图在Java中使用非常大的方形矩阵,大约n = 1e6或更多.矩阵不是稀疏的,所以我没有看到很多方法将它们表示为2D数组,这需要n ^ 2*sizeof(int)位的内存.显然,即使添加编译器标志以用作我的机器允许的大堆,我也会遇到堆溢出错误.
我愿意为了这个问题而假设我拥有完美的计算机(无限制的RAM等),尽管实际上我在64位机器上有16 GB的RAM.似乎我的机器只是如此相关,因为我受JVM的限制而不是我的实际硬件(因为JVM不能拥有比我的物理机更多的内存).
我理解(并且引用,例如,在这里制作一个非常大的Java数组),Java阵列甚至在理论上也不能比用于索引的MAX_INT大.
我的问题是:有没有办法从JVM堆中哄骗额外的内存
据我所知,如果有,他们可能不会给我更多信息.
例如
在C中,我可以声明静态常量变量,并将它们移动到代码的数据部分,这将比堆有更多的空间,远远超过堆栈(存储的静态变量在哪里(在C/C++中)?) .
在Java中,似乎即使我将变量复制到"数据"部分,该值也会进入java中的主堆 静态分配 - 堆,堆栈和永久生成,这意味着我已成功移动一个完整的字节堆(耶!)
我的解决方案
我的"解决方案"并不是真正的解决方案.我创建了一个简单的数据结构,它使用RandomFileAccess io过程来替换对外部文件的读写的数组访问.它仍然是恒定时间访问,但我们从Java最快的操作之一转到非常非常慢的过程(尽管我们可以同时从文件中提取"缓存"行,这使得该过程非常快速).好主意?
不是我的问题
我不是问如何在java的最大数组大小之上创建一个数组.这是不可能的.这些是嵌套数组 - 单个n大小的数组很好,其中n个引起问题.
我不是问这个如何处理"java.lang.OutOfMemoryError:Java堆空间"错误(64MB堆大小).垃圾收集是不相关的 - 我甚至无法让阵列更加担心何时被删除.
我也不能使用迭代器(我认为),否则这将是一种可能性; 像矩阵乘法这样的函数需要能够直接索引
注意:Java不是在非常大的矩阵上进行操作的正确语言.我最好使用算盘.但我在这里,这是我无法控制的.
在python 2中,内置函数map
似乎调用__len__
时长度被覆盖.这是否正确 - 如果是这样,为什么我们计算迭代的长度来映射?Iterables不需要覆盖长度(例如),并且即使长度没有被iterable预定义,map函数也能工作.
地图在这里定义; 它确实指定在传递多个iterables的情况下存在与长度相关的功能.然而,
None
map(f, iterable)
基本上相当于:
[f(x) for x in iterable]
但我遇到了一些简单的例子.
例如
class Iterable:
def __iter__(self):
self.iterable = [1,2,3,4,5].__iter__()
return self
def next(self):
return self.iterable.next()
#def __len__(self):
# self.iterable = None
# return 5
def foo(x): return x
print( [foo(x) for x in Iterable()] )
print( map(foo,Iterable()) )
Run Code Online (Sandbox Code Playgroud)
表现得如此,但如果你取消超载的话len
,它就不会.
在这种情况下,它会引发AttributeError,因为iterable是None
.虽然单位行为是愚蠢的,但我认为在len的规范中没有要求不变性 …
编辑:澄清将任何有效数字编码从字符串转换为数字
对于所有可接受的整数格式,特别是在Integer.parseInt下抛出NumberFormatException的整数格式,如何将字符串转换为数字(例如仅为整数).例如,代码
...
int i = 0xff;
System.out.println(i);
String s = "0xff";
System.out.println( Integer.parseInt(s) );
....
Run Code Online (Sandbox Code Playgroud)
将在第四行抛出NumberFormatException,即使该字符串显然是十六进制整数的有效编码.我们可以假设我们已经知道编码是一个有效数字,比如通过对正则表达式进行检查.检查溢出会很好(比如Integer.parseInt会这样做),但如果必须将其作为一个单独的步骤完成,那也没关系.
我可以遍历每个数字并手动计算复合数,但这很难.有没有更好的办法?
编辑:很多人都在回答十六进制,这很好,但并不完全是我所要求的(这是我的错,我以十六进制为例).我想知道是否有办法解码所有有效的java数字.Long.decode绝对非常适合捕捉十六进制,但它失败了
222222L
Run Code Online (Sandbox Code Playgroud)
这是一个完全有效的长期.我是否必须分别捕捉每种不同的数字格式?我假设你使用正则表达式来判断它是什么类型的数字,即区分浮点数,整数等.
有什么方法可以向Java中的内置枚举类添加元素?
我的问题类似于Java能否在运行时添加和删除枚举元素,但该问题似乎旨在构建自己的枚举,然后对其进行修改。我假设存在无法更改的现有枚举,例如
enum Days{ MONDAY, TUESDAY, WEDNESDAY }
Run Code Online (Sandbox Code Playgroud)
我想在此添加星期四,星期五等。因此,不幸的是,关于如何使用接口来实现我的目标的建议,或比枚举更有效的其他方法的建议,在这里不适用。
据我了解,枚举是隐式最终的,因此无法扩展它并向其中添加更多元素。它具有专用字段,但看来我可以使用反射来访问这些字段-即使我不能添加一个新的专用字段,也可以更改一个专用字段,例如,将星期一更改为星期四?
编辑:澄清情况
人们建议在将代码编译到程序中之前先对其进行更改。我的代码是我无法更改的更大项目的一部分;包含枚举的类由较大的程序加载,然后我的类才能访问它。到那时,我想将缺少的元素添加到枚举中。字节码操作仍然是要走的路吗?
有没有办法让 Tkinter 列表框的项目成为条目小部件?结果是您可以动态修改列表框条目中的文本。如果您的列表框看起来像:
--------
| Apples |
| Pears |
| Oranges |
---------
Run Code Online (Sandbox Code Playgroud)
那么您可能希望能够点击苹果并编写一些任意文本 - 然后您可以绑定 Enter 键,例如,根据新文本触发功能。