demo效果图:

PC端

android端

大体流程

android端是服务器端,绑定IP和端口,监听来自PC端的连接, pc端通过socket与服务器andorid端传输图片。

主要代码

android端

private Runnable mythread = new Runnable(){

        @Override
public void run() {
// TODO Auto-generated method stub
try {
ServerSocket serverSocket =new ServerSocket();
Log.i("start server", "start server ------port :3200");
while (true) {
Socket socket =serverSocket.accept();
new server(socket ,imageView).start(); }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    public void startserver(View v) {

         Thread thread1 = new Thread(mythread, "thread1");
thread1.start(); }
public class server extends Thread {
private ImageView imageView;
private Socket socket;
public static byte imageByte[];
private Handler handler; class MyHandler extends Handler{
public MyHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
super.handleMessage(msg);
imageView.setImageBitmap((Bitmap)msg.obj); }
} public void run() {
Looper looper = Looper.getMainLooper(); //主线程的Looper对象
handler = new MyHandler(looper);
try {
int imageSize=;//expected image size 640X480X3
InputStream in = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte buffer[] = new byte[];
int remainingBytes = imageSize; //
while (remainingBytes > ) {
int bytesRead = in.read(buffer);
if (bytesRead < ) {
throw new IOException("Unexpected end of data");
}
baos.write(buffer, , bytesRead);
remainingBytes -= bytesRead;
}
in.close();
imageByte = baos.toByteArray();
baos.close();
socket.close();//关闭socket,一次连接传一幅图像 int nrOfPixels = imageByte.length / 3; // Three bytes per pixel.
int pixels[] = new int[nrOfPixels];
for(int i = ; i < nrOfPixels; i++) {
int r = imageByte[*i];
int g = imageByte[*i + ];
int b = imageByte[*i + ];
if (r < )
r = r + ; //Convert to positive
if (g < )
g = g + ; //Convert to positive
if (b < )
b = b + ; //Convert to positive
pixels[i] = Color.rgb(b,g,r);
} Bitmap bitmap = Bitmap.createBitmap(pixels, , , Bitmap.Config.ARGB_8888); Message msg = handler.obtainMessage();
msg.obj = bitmap;
handler.sendMessage(msg);//图像已经转换好了,发送消息给UI线程更新图像 } catch (Exception e) {
// TODO: handle exception
}

PC端

    VideoCapture cap();                        /* open webcam */
if(!cap.isOpened())
{
return -;
}
Mat frame;
cap.set(CV_CAP_PROP_FRAME_WIDTH, ); /* set width */
cap.set(CV_CAP_PROP_FRAME_HEIGHT, ); /* set height */ try
{
boost::asio::io_service io_service;
tcp::endpoint end_point(boost::asio::ip::address::from_string(argv[]), ); tcp::socket socket(io_service); boost::system::error_code ignored_error; while (true)
{
cap>>frame; imshow("client",frame); char c=(char)waitKey();
if (c==)
{
break;
} frame = (frame.reshape(,)); // to make it continuous
socket.connect(end_point);
std::string message((char *)frame.data,); /* the size of mat data is 320*240*3 */
socket.write_some(boost::asio::buffer(message), ignored_error);
cout<<"send image finished"<<endl; socket.close(); }
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}

运行 asio.exe 192.168.1.101

PC端使用opencv获取webcam,通过socket把Mat图像传输到android手机端的更多相关文章

  1. 利用ddmlib 实现 PC端与android手机端adb forword socket通信(转)

    上篇文章讲了PC与android手机连接的办法 ,通过java调用系统命令执行adb命令操作,实际上是一个比较笨的办法. 网上查阅资料,发现google 提供了ddmlib库 (adt-bundle\ ...

  2. 手机控制台调试(需PC端协助)

    工具需求: 1.PC 2.手机(暂时只测试安卓,ios可能是在证书上有区别?) 3.以上两个工具在同一局域网下 步骤:  一 ,PC端登录nodejs官网,选择并下载安装 next,下一步下一步即可( ...

  3. Java判断PC端还是移动端

    package com.*.*.*; import java.io.IOException;import java.util.regex.Matcher;import java.util.regex. ...

  4. 检测当前运行环境——移动端与PC端。

    方法1: $(function checkBrowser(){ var browser={ versions:function(){ var u = navigator.userAgent, app ...

  5. web端和手机端测试有什么不同

    面试中经常被问到web端测试和手机端测试有什么相同点和区别呢?现在总结一下这个问题,如有不对敬请指正 web端和手机端测试有什么区别 1.相同点 不管是web测试还是手机App测试,都离不开测试的相关 ...

  6. 利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换

    我比较喜欢听音乐,特别是周末的时候,电脑开着百度随心听fm,随机播放歌曲,躺在床上享受.但碰到了一个烦人的事情,想切掉不喜欢的曲子,还得起床去操作电脑换歌.于是思考能不能用手机控制电脑切换歌曲,经过一 ...

  7. 如何直接在 PC 端获取其它端设备的 UserAgent 信息呢?

    如何直接在 PC 端获取其它端设备的 UserAgent 信息呢 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5909615.html 序 希望收 ...

  8. Android笔记之adb命令应用实例1(手机端与PC端socket通讯上)

    Android端的代码: 布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/ ...

  9. js实现禁止pc端浏览器缩放和获取当前页面浏览器的缩放大小

    众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable=0">即可,但 ...

随机推荐

  1. Delphi与Qt在Windows下使用共享内存进程间通信

    Delphi部分 type  TGuardInfo=record    Lock: Integer;  end;  PGuardInfo = ^TGuardInfo; TGuardShareMem=c ...

  2. appStore上传苹果应用程序软件发布流程(之前都是同事发,复制一份备用)

    首先确定帐号是否能发布, https://developer.apple.com/account,如果你打开Provisioning Portal,然后点击DisTribution看到的是下图中那样, ...

  3. [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

    在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...

  4. 团体程序设计天梯赛-练习集L2-007. 家庭房产

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  5. the structure of the project (MVC)

    HTML <--- JSP <---- JS <---- Java controller <---- DAO <---- Database The JSP Model 2 ...

  6. 【HTTP】Fiddler(一) - Fiddler简介和使用

    1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: a.Firebug虽然可以抓包 ...

  7. DJANGO结合jQuery cxSelect 作二级菜单过滤

    EN,到这个阶段,基本功能算是完成了. 使用了jQuery cxSelect这个插件. http://code.ciaoca.com/jquery/cxselect/ 相关代码如下: html: &l ...

  8. hdu 1760 A New Tetris Game 博弈论

    找sg值,可以选择暴力,也可以利用sg值的特点简化. 暴力就跟取石子一样,没什么差别,DFS搞定.把矩阵看成一个字符串,字符串就是一个状态. 其实我们也可以不暴力求sg值,因为只要当前状态能到达一个s ...

  9. Android 控制ScrollView滚动到底部

    scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部 scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部 ...

  10. coco2d-js 多屏适配相关API

    setDesignResolutionSize() //设计分辨率大小及模式  setContentScaleFactor() //内容缩放因子 setSearchPaths() //资源搜索路径 g ...