【问题标题】:Scan a image with emgu cv使用 emgu cv 扫描图像
【发布时间】:2012-04-05 02:10:52
【问题描述】:

所以我有一张用sobel方法处理过的图像,现在我需要提取该图像。

我的问题是如何从中线 uo 开始逐行扫描图像,当边缘数小于 60 时,记录该坐标以裁剪图像。

有问题的图像是条码,这种方法应该只用于提取条形。问题在于 emgu cv 的实现。

更新:

我按照本文描述的方法:http://bit.ly/HUWdcy

本题参考C.图像提取章节

【问题讨论】:

    标签: c# opencv emgucv


    【解决方案1】:

    检查cv::thresholdcv::reduce 函数。

    首先将从您的边缘图像创建一个二进制地图,条纹为黑色,背景为白色。

    像这个小例子:

    边缘之后

    1 70  0 0 85  128 99  0
    1 70  0 0 85  128 99  0
    1 70  0 0 85  128 99  0
    1 70  0 0 85  120 99  0
    1 74  0 0 85  138 99  0
    1 80  0 0 85  128 99  0
    1 72  0 0 85  128 99  0
    

    阈值后

    0 255 0 0 255 255 255 0
    0 255 0 0 255 255 255 0
    0 255 0 0 255 255 255 0
    0 255 0 0 255 255 255 0
    0 255 0 0 255 255 255 0
    0 255 0 0 255 255 255 0
    0 255 0 0 255 255 255 0
    

    第二个函数可用于将图像“投影”到其中一个维度上,使用 CV_MAXCV_SUMCV_AVG,您会将条形码存储在一行中

    reduceSUM 的示例:

    0 1785 0 0 1785 1785 1785 0
    

    现在,重新应用阈值:

    0 1 0 0 1 1 1 0
    

    【讨论】:

    • 感谢您的回答,但我现在的问题是找到代码的边缘,我已经完成了上面文章中提到的图像处理,然后将 sobel 运算符应用于图像。现在要查看代码边缘,我想我可以从图像中间上下移动并检查像素是否相等,因为我知道它们以 101 开始和结束,但是对于我读取的像素,我没有得到这样的东西,只有很多 0,然后是 1。
    • 我在你的回答中看到,你已经考虑了代码,没有背景,并使用 reduce 方法将矩阵放在一个向量中,我的问题是我不能在我的项目中执行 reduce 方法,例如 cvinvoke.cvreduce(...) 和 img.reduce(...) 不起作用,我输入的参数是错误的,如果你能提供帮助会很棒.
    • @celsoap7 我没有时间也没有代码的经验来帮助你。我希望这是一个开始,我邀请您更深入地学习和尝试。
    猜你喜欢
    • 2017-12-24
    • 2011-07-03
    • 1970-01-01
    • 2015-02-17
    • 2015-03-08
    • 2017-12-10
    • 2012-04-02
    • 2016-08-11
    • 2013-12-28
    相关资源
    最近更新 更多