我想知道是否存在基于某些特征分割图像的"智能"方式.
图像是300x57,黑色和白色(实际上是灰度,但大多数颜色是黑色或白色),它由两个主要特征(让我们称之为斑点)组成,由黑色空间分隔,每个斑点的宽度和高度略有不同,斑点的位置也各不相同,斑点永远不会重叠!
这是图像"看起来"的样子:
-------------------------
----WWW---------WWWWW----
---WWWWWWW----WWWWWW-----
-----WWWW-------WWW------
-------------------------
Run Code Online (Sandbox Code Playgroud)
由此产生的分裂将是这样的:
------------ -------------
----WWW----- ----WWWWW----
---WWWWWWW-- --WWWWWW-----
-----WWWW--- ----WWW------
------------ -------------
Run Code Online (Sandbox Code Playgroud)
我计划采取的步骤,以分割图像:
如果我规范化图像宽度会很好,所以我的所有图像在保存时都具有统一的宽度.
我没有图像处理的经验,所以我不知道这是一种有效的方法.我目前正在使用BufferedImage,获取宽度/高度,迭代每个像素等等.我的问题没有错误的解决方案,但我正在寻找更高效的解决方案(更少代码+更快).我也一直在研究java.awt.Graphics ......
如果我能找到更有效的方法来完成这项任务,我将不胜感激.我想坚持使用Java的内置库,在这种情况下,BufferedImage或Graphics2D是最有效的吗?
编辑:这是阅读建议后的代码:
public void splitAndSaveImage( BufferedImage image ) throws IOException
{
// Process image ------------------------------------------
int height = image.getHeight();
int width = image.getWidth();
boolean edgeDetected = false;
double averageColor = 0;
int threshold = -10;
int rightEdge = 0;
int leftEdge = 0;
int middle = 0;
// Scan the image and …Run Code Online (Sandbox Code Playgroud) 我想创建一个Delegate反射方法,但Delegate.CreateDelegate需要Type指定委托.是否有可能动态创建一个匹配任何功能的'委托'?
这是一个简单的例子:
class Functions
{
public Functions()
{
}
public double GPZeroParam()
{
return 0.0;
}
public double GPOneParam(double paramOne)
{
return paramOne;
}
public double GPTwoParam(double paramOne, double paramTwo)
{
return paramOne+paramTwo;
}
}
static void Main(string[] args)
{
Dictionary<int, List<Delegate>> reflectedDelegates = new Dictionary<int, List<Delegate>>();
Functions fn = new Functions();
Type typeFn = fn.GetType();
MethodInfo[] methods = typeFn.GetMethods();
foreach (MethodInfo method in methods)
{
if (method.Name.StartsWith("GP"))
{
ParameterInfo[] pi = method.GetParameters();
if …Run Code Online (Sandbox Code Playgroud) 我有一个正则表达式([-@.\/,':\w]*[\w])*,它匹配文本中的所有单词(包括像IBM这样的标点符号),但我想让它排除下划线,我似乎无法弄清楚如何做到这一点...我尝试添加^[_](例如(^[_][-@.\/,':\w]*[\w])*)但它只是将所有单词分解为字母.我想保留单词匹配,但我不希望在其中包含带下划线的单词,也不希望单词完全由下划线组成.
什么是正确的方法来做到这一点?
PS
更新
这是一个例子:
"IBM应该被解析为一个单词w_o_r_d!俄语也应该起作用:мплексисторическихсобытий."
比赛应该是:
I.B.M.
should
be
parsed
as
one
word
Russian
should
work
too
??????
????????????
???????
Run Code Online (Sandbox Code Playgroud)
请注意,w_o_r_d不应该匹配.
我已经在SO上看到了其他一些答案,这些答案表明我们可以通过从"其他"时间减去纪元时间从毫秒中获取时间,但是当我尝试它时它不起作用:
ptime epoch = time_from_string("1970-01-01 00:00:00.000");
ptime other = time_from_string("2011-08-09 17:27:00.000");
long diff = (other-epoch).total_milliseconds();
Run Code Online (Sandbox Code Playgroud)
在这个阶段差异是-1349172576,它应该是一个正数,因为"其他"时间是2011年.有人知道是什么原因造成的吗?从纪元开始,获得毫秒的正确方法是什么?
另外,我试图从毫秒开始构造一个ptime对象:
ptime result = from_time_t(diff);
Run Code Online (Sandbox Code Playgroud)
然后结果变为:"1927-Apr-01 13:50:24",它应该是"2011年8月9日17:27:00.000".这里有什么收获?
好的,所以我的错误源于我有2个程序,一个是C#(8字节/ 64位长)和一个C++(4字节/ 32位长); 无论如何,这里没有描述这种互动.
但是,当我使用时long long,该值为正,但结果日期(构造from_time_t)仍然不正确:"2012-Oct-02 10:09:36".
我的项目依赖于我通常通过MSBuild目标复制到输出目录的一些本机库(DLL).运行应用程序时没有问题,但我在Visual Studio中编写了一些单元测试,每次运行单元测试时,程序集和可执行文件都会从输出目录复制到staging文件夹中:C:\path\to\MyProject\TestResults\myWorkStationName 2012-03-20 13_53_56\Out
遗憾的是,本机DLL不会复制到暂存目录中,并且会在每次测试运行时生成暂存目录.是否有一个MSbuild目标允许我将东西复制到临时目录?
PS我不确定"staging目录"是否是正确的术语,所以请原谅我的无知,如果不是:).
我首先想知道是否有一种使用纯servlet从URL获取子域的内置方法?
然后,如果春天有任何助手?
所以我的网址就像:
jonskeet.stackoverflow.com
Run Code Online (Sandbox Code Playgroud)
JonSkeet是子域名.
我将创建一个过滤器,它将根据子域值加载一个对象.
顺便说一句,在创建过滤器时,有没有办法订购过滤器以确保它们按特定顺序点火?
我在网上看到了一篇关于如何将CSS选择器映射到XPATH查询的文章,所以我试图弄清楚是否有任何.NET库可以进行映射/转换.如果您对如何执行映射有任何参考或任何想法(如果库不可用),请告诉我.
我有一个Qt应用程序,有多个类使用信号和插槽,它编译得很好.但是,当我在主CPP(main.cpp)文件中创建自定义类时,我收到链接器错误.
这是我使用的代码:
class Counter : public QObject
{
Q_OBJECT
public:
Counter() { m_value = 0; }
int value() const { return m_value; }
public slots:
void setValue(int value)
{
if(value!=m_value)
{
m_value = value;
qDebug() << "Value " << value;
emit valueChanged(value);
}
}
signals:
void valueChanged(int newValue);
private:
int m_value;
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Counter a, b;
QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));
a.setValue(12); // a.value() == 12, b.value() == 12
b.setValue(48); // a.value() == …Run Code Online (Sandbox Code Playgroud) 假设我正在运行一个基于网络的交换并且有一个新客户注册。我为该客户提供了一个新的 CompID,现在我想将该 CompID 添加到我的接受方。我是否必须重新启动我的接受器或者可以动态完成吗?
必须提前就 CompID 达成一致,然后将其粘贴到某处的配置中,这似乎不太具有可扩展性。
我见过一些据说可以做到这一点的示例,但它们似乎只是通过将配置设置为*. 还有其他方法可以做到这一点吗?