vfp 二维码如何解码?

QRMarker 控件可以生成二维码,有什么办法把二维码解码?把二维再还原成文字?

回答: vfp 二维码如何解码?

  1. 一般有三种方法解码 QRCode

    1. 在线解码
    http://zxing.org/w/decode.jspx

    2. 有很多第三方的 Dll / Ocx 等
    但大部分要购买的

    3. 开源的
    比如 ZXing、Google、银光等等

哪有比较好的QRCODE二维码解码代码

  1. Q
    要求是VC++语言或Pascal语言撰写的代码,最好是Pascal语言,网上找到过用VC6撰写的QRCode二维码解码源代码,但是好像图像识别能力差,只能解码生成的原始图像,不能解码用摄像头扫描的图像,如果没有具体代码,有现成的DLL也行,只要能识别摄像头摄取的图像即可,java代码的不要,比如zxing,因为看不懂。
  2. A
    楼主在这方面耗费精力不值得,因为二维码的识别已经成熟化、硬件化了,你只要买个扫描枪即可。摄像头生成的图像与分辨率及放置位置不好控制,效果也不好,测试用可以,不能进入应用领域。

vfp能生成二维码吗?

  1. Q
    vfp能生成二维码吗?
  2. A
    你找一找第三方的控件吧。

利用QRMaker1.3控件制作二维码为什么有些字生成的是乱码,例如“张学友”不识别“张”

  1. Q
    利用QRMaker1.3控件制作二维码为什么有些字生成的是乱码,例如“张学友”不识别“张”
  2. A
    没有使用说明书或帮助文件,只能瞎猜了
    InputDataB 可能是 Binary 即二进制数据的意思,也就是把输入的数据不作为 ascii 码而作为二进制来解释吧
    EFBBBF 是 UTF8 编码的前缀标识符号,参见 vfp 帮助中关于 StrToFile 函数的描述
    StrConvert 这个是 vfp 的内置函数,不用解释了吧

浅谈二维码图片zxing解析

  1. Q
    在zxing中解码大致流程为:
    1:获取摄像头byte[] data
    2:对数据进行解析
    在zxing客户端源码中
    PreviewCallback 摄像头回调 data就是出自这里
    PlanarYUVLuminanceSource 继承与LuminanceSource不同的数据原 YUV RGB
    RGBLuminanceSource
    AutoFocusCallback  自动对焦。不能自动对焦的手机zxing就不能发威了
    CameraManager  摄像头管理类。打开,关闭
    DecodeThread   线程管理主要利用到了CountDownLatch
    DecodeHandler  数据传输中枢。我理解DecodeThread控制线程,DecodeHandler发送数据
    DecodeFormatManager  这个配置解码格式。一维码,二维码等
    CaptureActivityHandler 这个是解码与avtivity中介。解码成功,失败都用她回调
    ViewfinderView  我们看到的扫描框,搞花样就从她入手

    上面是我对zxing的理解。

    下面是 二维码从图片解析内容的分析与实现
  2. A
    这里有个web版的生成器:http://blog.csdn.net/suntongo/article/details/8742023

关于微信公众号二维码的问题

  1. Q
    现在想对公众号的二维码做个修改,希望能解决下面两个问题中的一个

    问题1:扫码时能不能判断出来是通过微信扫描还是通过UC的扫描或者是通过其他的扫码工具扫描?如果可以,怎么判断?


    问题2:如果问题1没办法解决的话,求解决这个问题

    我用二维码解码器把公众号二维码解码后得到一个链接如“http://XXXXXx”

    现在我想做一个页面,这个页面里面放个
    <a href='http://XXXXXXx'>关注微信公众号</a>

    链接,可能还有其他很多内容,然后我把这个页面生成一个二维码,想让用户通过微信扫码打开页面时,点击“关注微信公众号”的时候,跟直接扫描公众号二维码一样打开关注公众号的页面。

    但是做的时候发现点击那个链接后,跳转到了谷歌市场下载微信的页面。

    所以第二个问题就是想问下,能不能在一个微信扫码打开的页面里,通过点击一个链接关注公众号?
  2. A
    关于二维码生成,请查看最新的微信公众平台文档

B/S中asp.net实现自动调用摄像头,扫描并解析二维码

  1. Q
    B/S中asp.net实现自动调用摄像头,扫描并解析二维码

    不管是在电脑还是手机上访问网站,焦点在指定的文本框中后,自动调用摄像头,并自动扫描解析二维码信息。

    各位大虾,麻烦指点迷津呀,麻烦指点指点思路。
  2. A
    找个自动解码的描扫枪


    B/S中asp.net实现自动调用摄像头,扫描并解析二维码
      那是什么东西?

将用户上传的图片转换成二维码并保存到数据库,急!!

  1. Q
    1.如何将图片转换成二维码
    2.怎么样赋值给对象
    最好是代码说明
  2. A
    二维码 编码 、 解码 可用Google的开源项目ZXing
    包下载地址

    http://code.google.com/p/zxing/downloads/list

    小例子
    http://mazd1002.blog.163.com/blog/static/6657496520116241120197/
    楼主也可以搜搜相关资料。

opencv二维码检测定位不用识别

  1. Q
    opencv二维码检测定位不用识别

    原始图片类似上图
    要求:
    1、用hough变化定位出二维码的位置
    2、对二维码进行几何校正
    3、开发工具VS2010控制台程序+OpenCV2.4.3或以上
    最后的结果类似下图:
    opencv二维码检测定位不用识别

    求各位大神给个思路或者有偿编写也行,很简单的一个程序,实在不行做到要求1就行,急~
  2. A
    现在让我们开始写点代码,新建一个文件,命名为detect_barcode.py,打开并编码:
    1# import the necessary packages
    2importnumpy as np
    3importargparse
    4importcv2
    5
    6# construct the argument parse and parse the arguments
    7ap =argparse.ArgumentParser()
    8ap.add_argument("-i", "--image", required =True, help="path to the image file")
    9args =vars(ap.parse_args())
    我们首先做的是导入所需的软件包,我们将使用NumPy做数值计算,argparse用来解析命令行参数,cv2是OpenCV的绑定。
    然后我们设置命令行参数,我们这里需要一个简单的选择,–image是指包含条形码的待检测图像文件的路径。
    现在开始真正的图像处理:
    11# load the image and convert it to grayscale
    12image =cv2.imread(args["image"])
    13gray =cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    14
    15# compute the Scharr gradient magnitude representation of the images
    16# in both the x and y direction
    17gradX =cv2.Sobel(gray, ddepth =cv2.cv.CV_32F, dx =1, dy =0, ksize =-1)
    18gradY =cv2.Sobel(gray, ddepth =cv2.cv.CV_32F, dx =0, dy =1, ksize =-1)
    19
    20# subtract the y-gradient from the x-gradient
    21gradient =cv2.subtract(gradX, gradY)
    22gradient =cv2.convertScaleAbs(gradient)
    12~13行:从磁盘载入图像并转换为灰度图。
    17~18行:使用Scharr操作(指定使用ksize = -1)构造灰度图在水平和竖直方向上的梯度幅值表示。
    21~22行:Scharr操作之后,我们从x-gradient中减去y-gradient,通过这一步减法操作,最终得到包含高水平梯度和低竖直梯度的图像区域。
    上面的gradient表示的原始图像看起来是这样的:
    注意条形码区域是怎样通过梯度操作检测出来的。下一步将通过去噪仅关注条形码区域。
    24# blur and threshold the image
    25blurred =cv2.blur(gradient, (9, 9))
    26(_, thresh) =cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)
    25行:我们要做的第一件事是使用9*9的内核对梯度图进行平均模糊,这将有助于平滑梯度表征的图形中的高频噪声。
    26行:然后我们将模糊化后的图形进行二值化,梯度图中任何小于等于255的像素设为0(黑色),其余设为255(白色)。
    模糊并二值化后的输出看起来是这个样子:
    然而,如你所见,在上面的二值化图像中,条形码的竖杠之间存在缝隙,为了消除这些缝隙,并使我们的算法更容易检测到条形码中的“斑点”状区域,我们需要进行一些基本的形态学操作:
    28# construct a closing kernel and apply it to the thresholded image
    29kernel =cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))
    30closed =cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
    29行:我们首先使用cv2.getStructuringElement构造一个长方形内核。这个内核的宽度大于长度,因此我们可以消除条形码中垂直条之间的缝隙。
    30行:这里进行形态学操作,将上一步得到的内核应用到我们的二值图中,以此来消除竖杠间的缝隙。
    现在,你可以看到这些缝隙相比上面的二值化图像基本已经消除:
    当然,现在图像中还有一些小斑点,不属于真正条形码的一部分,但是可能影响我们的轮廓检测。
    让我们来消除这些小斑点:
    32# perform a series of erosions and dilations
    33closed =cv2.erode(closed, None, iterations =4)
    34closed =cv2.dilate(closed, None, iterations =4)
    我们这里所做的是首先进行4次腐蚀(erosion),然后进行4次膨胀(dilation)。腐蚀操作将会腐蚀图像中白色像素,以此来消除小斑点,而膨胀操作将使剩余的白色像素扩张并重新增长回去。
    如果小斑点在腐蚀操作中被移除,那么在膨胀操作中就不会再出现。
    经过我们这一系列的腐蚀和膨胀操作,可以看到我们已经成功地移除小斑点并得到条形码区域。
    最后,让我们找到图像中条形码的轮廓:
    36# find the contours in the thresholded image, then sort the contours
    37# by their area, keeping only the largest one
    38(cnts, _) =cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,
    39  cv2.CHAIN_APPROX_SIMPLE)
    40c =sorted(cnts, key =cv2.contourArea, reverse =True)[0]
    41
    42# compute the rotated bounding box of the largest contour
    43rect =cv2.minAreaRect(c)
    44box =np.int0(cv2.cv.BoxPoints(rect))
    45
    46# draw a bounding box arounded the detected barcode and display the
    47# image
    48cv2.drawContours(image, [box], -1, (0, 255, 0), 3)
    49cv2.imshow("Image", image)
    50cv2.waitKey(0)
    38~40行:幸运的是这一部分比较容易,我们简单地找到图像中的最大轮廓,如果我们正确完成了图像处理步骤,这里应该对应于条形码区域。
    43~44行:然后我们为最大轮廓确定最小边框
    48~50行:最后显示检测到的条形码
    正如你在下面的图片中所见,我们已经成功检测到了条形码:

WPF调用摄像头扫描二维码

  1. Q
        在WPF平台
       用WPFMediaKit控件调用摄像头扫描二维码,用ZXing的类库去解析,但是一直解析不出来,请高手帮忙!

        private RenderTargetBitmap bmp;
            private BitmapEncoder encoder;
            private MultiFormatReader reader;
           if (bmp == null)
                {
                    bmp = new RenderTargetBitmap( (int)m_VideoCaptureElement.ActualWidth,
                    (int)m_VideoCaptureElement.ActualHeight, 96, 96, PixelFormats.Pbgra32);
                    bmp.Render(m_VideoCaptureElement);
                }
                if (encoder == null)
                {
                    encoder = new JpegBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(bmp));
                }
                MemoryStream stream = new MemoryStream();
                stream.Seek(0, SeekOrigin.Begin);
                encoder.Save(stream);      
                if (source == null)
                {
                    source = new RGBLuminanceSource(stream.ToArray(), 15, 15, RGBLuminanceSource.BitmapFormat.BGR24);
                }
                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
                reader = new MultiFormatReader();
                if (bitmap.BlackMatrix != null)
                {
                    Result result = reader.decode(bitmap);
                     MessageBox.Show(result.Text);
                }
  2. A
      MemoryStream stream = new MemoryStream();
                 stream.Seek(0, SeekOrigin.Begin);
                 encoder.Save(stream);      
    这句后边加上
    stream.Position=0;
    试试看