• SXH232摄像头使用示范


    It occurred to me suddenly that I wanted to program the our camera sensor for PC desktop, just like the one purchased from shop, which can make the video recording. Finally although the result seemed not to be as good as expected, it improved me.

    Here I used the SXH232-V1 camera. Judging from literal meaning, it has RS232 port obviously.So first connect the camera to PC with 232 port correctly. Then create a winform VS project, and create a form like this:


    Here's what I intend to do. when I click "start taking photo" button, the picture taken by camera is showed in the picturebox in no time.If the speed is fast enough, then we'll see a video made up of several frames of pictures. However to my pity, I haven't done it completely, which means it has a few seconds of delay.

    OK, then let's see the main code:

    private SXH sxh =  new SXH();
    private Queue<Image> queue = new Queue<Image>();
    private Image img = null;
    
    Thread pic, pbx;
    
    public Form1()
    {
    	InitializeComponent();
    	this.comboBox1.Text = "COM1";
    	this.comboBox2.Text = "115200";
    	this.comboBox3.Text = "640x480";
    	this.comboBox4.Text = "2";
    
    	sxh.InitSXH(this.comboBox1.Text, Convert.ToInt32(this.comboBox2.Text),
    		this.comboBox3.Text,Convert.ToInt32(this.comboBox4.Text));
    }

    first create some private members and initiate the form and camera


    private void button1_Click(object sender, EventArgs e)
    {
    	pic = new Thread(new ThreadStart(TakePic));
    	pic.Start();
    
    	pbx = new Thread(new ThreadStart(ShowPic));
    	pbx.Start();
    
    	this.comboBox1.Enabled = false;
    	this.comboBox2.Enabled = false;
    	this.comboBox3.Enabled = false;
    	this.comboBox4.Enabled = false;
    	this.button1.Enabled = false;
    }

    when I start taking, the message handling function creates two threads. One is responsible for taking picture, another for showing it.


    public void TakePic()
    {
    	byte[] data = null;
    	while (true)
    	{
    
    		sxh.GetData(0x01, out data);//获得图片字节
    
    		if (data != null)
    		{
    			MemoryStream ms = new MemoryStream(data);
    			img = System.Drawing.Image.FromStream(ms);                 
    		}
    
    		if (img != null)
    		{
    			img.RotateFlip(RotateFlipType.Rotate180FlipX);//若摄像头安反了。就反转一下
    			queue.Enqueue(img);
    		}
    	}
    }
    
    public void ShowPic()
    {
    	while (true)
    	{
    		if (queue.Count > 0)
    		{
    			Image img = queue.Dequeue();
    			this.pictureBox1.Size = img.Size;
    			this.pictureBox1.Image = img;
    			//Thread.Sleep(200);
    		}
    	}
    }
    
    
    the above are two threads. One puts the image into queue, anther gets image from the queue.


    Of course, there is an important problem here. How do we get the data from camera? Well, we should write the camera driver according to camera document. As for the code, you can refer to the doc here, or you can contact me.

    Finally build the execute the program. let's watch a snapshot from camera:


    It has to be acknowledged that this program has imperfections. Sometimes after a little long time running, it will raise a kind of exception. Apparently there are errors in my code. Furthermore,  I'm looking forward to seeing the real-time video instead of the delayed pictures, but actually I've no idea whether it can be achieved. I had thought that I could handle it with threads programming. Anyway something's wrong with my design.

  • 相关阅读:
    mybatis3这个问题我晕为什么对于配置信息的节点放的位置也会报错
    QTP的那些事增删改查中的增加操作的测试用例及其脚本设计思路
    QTP的那些事importsheet注意的一些事情
    mybatis3中的结果集
    QTP的那些事终极项目脚本设计思路及其测试查询功能的一些实际项目体会
    mybatis+spring整合的几个好的例子
    QTP的那些事操作excel数据需要注意的事
    hibernate4的使用第一步环境搭建
    项目中关于IFRAME引发的问题【出现率很高】
    oracle直接sql语句后台递归查询返回一个树
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7357122.html
Copyright © 2020-2023  润新知