赞
踩
1、测试界面
2、核心代码
- using OpenCvSharp;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Windows.Forms;
-
- namespace TestProject
- {
- public partial class Form1 : DevExpress.XtraEditors.XtraForm
- {
- public Form1()
- {
- InitializeComponent();
- }
- Thread bath_th = null;
- Mat frame = null;
- private void simpleButton1_Click(object sender, EventArgs e)
- {
- try
- {
- //videocapture后面参数为0表示获取电脑本机摄像头的内容
- //如果输入rtsp地址就是获取网络摄像头的拍摄内容,rtsp地址可由摄像头厂家提供
- //已大华为例 rtsp://用户名:密码@ip:port
- if (frame != null)
- {
- MessageBox.Show("正在采集");
- return;
- }
- frame =new Mat();
- var capture = new VideoCapture(0);
-
- int sleeptime = (int)Math.Round(1000 / capture.Fps);
- bath_th = new Thread(
- new ThreadStart(delegate
- {
-
- while (true)
- {
- try
- {
- capture.Read(frame);
- if (frame.Empty())
- {
- break;
- }
- Bitmap image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(frame);
- this.Invoke((EventHandler)delegate
- {
- if (pictureEdit1.Image != null)
- {
- pictureEdit1.Image.Dispose();
- }
- pictureEdit1.Image = image;
- });
- Cv2.WaitKey(sleeptime);
- }
- catch { }
- }
- }));
- bath_th.Start();
-
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
-
- private void simpleButton2_Click(object sender, EventArgs e)
- {
- this.simpleButton2.Enabled = false;
- String qr_code = DetectQRCode(frame);
- if (!qr_code.Equals(string.Empty))
- {
- this.Invoke((EventHandler)delegate {
- this.textEdit1.Text = qr_code;
- });
- //MessageBox.Show(qr_code);
- }
- Thread.Sleep(1000);
- this.simpleButton2.Enabled = true;
- }
- public string DetectQRCode(Mat src)
- {
-
- //Mat src = Cv2.ImRead(@"D:\Project\禾川PLC\code.png");
- //图像灰度
- Mat gray = new Mat();
- Cv2.CvtColor(src, gray, ColorConversionCodes.BGRA2GRAY);
- //Cv2.ImShow("gray", gray);
- //二值化
- Mat threshold = new Mat();
- //Cv2.AdaptiveThreshold(gray, threshold, 255.0, AdaptiveThresholdTypes.MeanC, ThresholdTypes.Binary, 13, 2);
- Cv2.Threshold(gray, threshold, 0, 255, ThresholdTypes.Binary | ThresholdTypes.Otsu);
- //Cv2.ImShow("threshold", threshold);
- //绘制轮廓
-
- //截取二维码有效区域
- //识别二维码
- QRCodeDetector qRCodeDetector = new QRCodeDetector();
- Point2f[] point2Fs;
- //Cv2.ImShow("gray", gray);
- Mat mat = new Mat();
- string code = qRCodeDetector.DetectAndDecode(src, out point2Fs, mat);
- //Point[][] contours;
- //HierarchyIndex[] hierarchies;
- //Cv2.FindContours(src, out contours, out hierarchies, RetrievalModes.Tree, ContourApproximationModes.ApproxSimple);
- //RNG rng = new RNG(12345);
- //for (int i = 0; i < point2Fs.Length; i++)
- //{
- // Cv2.DrawContours(src, point2Fs, i, new Scalar(rng.Uniform(0, 255), rng.Uniform(0, 255), rng.Uniform(0, 255)), 6, LineTypes.Link4);
-
- //}
- // Cv2.Rectangle(src, new OpenCvSharp.Point((int)point2Fs[3].X, (int)point2Fs[1].Y), new OpenCvSharp.Point((int)point2Fs[2].X, (int)point2Fs[2].Y), new Scalar(0, 255, 255), 2);
- // Cv2.ImShow("src", src);
- return code;
- }
-
- private void simpleButton3_Click(object sender, EventArgs e)
- {
- this.textEdit1.Text = "";
- }
- }
- }
作者V: jbossjf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。