我试图unique_ptr在一个unique_ptr带有基类的函数中使用一个派生类.就像是:
class Base {};
class Derived : public Base {};
void f(unique_ptr<Base> const &base) {}
…
unique_ptr<Derived> derived = unique_ptr<Derived>(new Derived);
f(derived);
Run Code Online (Sandbox Code Playgroud)
如果我正确理解了这个答案,那么这段代码应该可行,但它会导致以下编译错误:
错误C2664:'f':无法将参数1从'std :: unique_ptr <_Ty>'转换为'const std :: unique_ptr <_Ty>&'
IntelliSense:没有合适的用户定义转换,从"std :: unique_ptr <Derived,std :: default_delete <Derived >>"到"const std :: unique_ptr <Base,std :: default_delete <Base >>"存在
如果我改变f采取unique_ptr<Derived> const &derived,它工作正常,但这不是我想要的.
难道我做错了什么?我该怎么做才能解决这个问题?
我正在使用Visual Studio 2012.
我目前正在研究某种OCR(光学字符识别)系统.我已经编写了一个脚本来从文本中提取每个字符并清除(大部分)不规则性.我也知道这个字体.我现在的图像例如是:
M(http://i.imgur.com/oRfSOsJ.png(font)和http://i.imgur.com/UDEJZyV.png(已扫描))
K(http://i.imgur.com/PluXtDz.png(font)和http://i.imgur.com/TRuDXSx.png(已扫描))
C(http://i.imgur.com/wggsX6M.png(font)和http://i.imgur.com/GF9vClh.png(已扫描))
对于所有这些图像,我已经有了一种二进制矩阵(1表示黑色,0表示白色).我现在想知道是否有某种类似数学投影的公式来看这些矩阵之间的相似性.我不想依赖图书馆,因为这不是给我的任务.
我知道这个问题可能看起来有点模糊,并且有类似的问题,但我正在寻找方法,而不是一个包,到目前为止我找不到任何关于该方法的评论.这个问题含糊不清的原因是我真的没有意义开始.我想要做的事实上是在维基百科上描述的:
矩阵匹配包括逐个像素地将图像与存储的字形进行比较; 它也被称为"模式匹配"或"模式识别".[9] 这依赖于输入字形与图像的其余部分正确隔离,并且存储的字形采用相似的字体和相同的比例.此技术最适用于打字文本,并且在遇到新字体时效果不佳.这是基于早期物理光电池的OCR实现的技术,而非直接实现.(http://en.wikipedia.org/wiki/Optical_character_recognition#Character_recognition)
如果有人能帮我解决这个问题,我会非常感激.