Processing 中使用OpenCV4处理摄像头画面(7)

栏目: 编程工具 · 发布时间: 5年前

内容简介:OpenCV提供了强大的计算机图像处理能力,Processing可以借助OpenCV,实现更多的操作。Processing是Java语言开发。Processing处理图像使用一纬的数组 Java 的 ByteBuffer,而OpenCV使用的是矩阵Mat。一、环境

OpenCV提供了强大的计算机图像处理能力,Processing可以借助OpenCV,实现更多的操作。

Processing是 Java 语言开发。Processing处理图像使用一纬的数组 Java 的 ByteBuffer,而OpenCV使用的是矩阵Mat。

一、环境

需要下载OpenCV4的类库。

下载地址: https://github.com/teamlet/OpenCV4-for-Processing/tree/master/lib

在当前项目根路径下创建code文件夹,把opencv-400.jar和libopencv_java400.dylib复制到code文件夹中。

二、代码

import processing.video.*;
import org.opencv.core.*;
import java.nio.ByteBuffer;

Capture cap;

void setup(){
  size(640,480);
  System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  cap = new Capture(this,width,height);
  cap.start();
  frameRate(30);
}

void draw(){
  if(!cap.available()){
    return;
  }
  
  background(0);
  cap.read();
  imgToMat(cap);
  image(cap,0,0);  
}


Mat imgToMat(PImage img){
  //create a matrix ,for opencv,with PImage width and height,type 8 character 32bit ,fill with zero
  Mat mat = new Mat(new Size(img.width,img.height),CvType.CV_8UC4, Scalar.all(0));
  
  //create a byteBuffer ,for processing,with matrix rows * cols * channels
  ByteBuffer b = ByteBuffer.allocate(mat.rows()*mat.cols()*mat.channels());
  
  //put image to buffer
  b.asIntBuffer().put(img.pixels);
  
  //move buffer pointer to the begin of buffer
  b.rewind();
  
  //put buffer to matrix
  mat.put(0,0,b.array());
  return mat;
}

图像处理过程:

1、图像在刷新的时候,调用 draw() 方法。

2、摄像头读取一帧,把一帧数据传到 imgToMat(),imgToMat 参数类型是PImage,Capture是PImage的子类。

PImage中使用 int[] 数组 pixels 保存图像数据。

Processing 中使用OpenCV4处理摄像头画面(7)

3、根据图像宽度和高度创建一个空矩阵。

Mat mat = new Mat(new Size(img.width,img.height),CvType.CV_8UC4, Scalar.all(0));

矩阵用4个字节,保存ARGB四个通道。每个通道8个bit,保存U 无符号数,用 0 填充--这就是代码中 8UC4 中8、4和U的含义。

4、根据空矩阵的行、列和(颜色)通道的数量,创建空的buffer--即一个一纬数组。

ByteBuffer b = ByteBuffer.allocate(mat.rows()*mat.cols()*mat.channels());

5、把图像的像素数据存入一纬数组

b.asIntBuffer().put(img.pixels); //把PImage的图像数据保存在ByteBuffer中

数组存入后,指针停在最后一个数据后。

6、移动指针,到数组的开始。

b.rewind();

7、通过数组把图像的数据写到矩阵的开始(0,0)位置。

mat.put(0,0,b.array());

启动摄像头后的效果图:

Processing 中使用OpenCV4处理摄像头画面(7)


以上所述就是小编给大家介绍的《Processing 中使用OpenCV4处理摄像头画面(7)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机科学概论(第11版)

计算机科学概论(第11版)

J. Glenn Brookshear / 刘艺、肖成海、马小会、毛倩倩 / 人民邮电出版社 / 2011-10-1 / 69.00元

本书多年来一直深受世界各国高校师生的欢迎,是美国哈佛大学、麻省理工学院、普林斯顿大学、加州大学伯克利分校等许多著名大学的首选教材,对我国的高校教学也产生了广泛影响。 本 书以历史眼光,从发展的角度、当前的水平以及现阶段的研究方向等几个方面,全景式描绘了计算机科学各个子学科的主要领域。在内容编排上,本书很好地兼顾了 学科广度和主题深度,把握了最新的技术趋势。本书用算法、数据抽象等核心思想贯穿各......一起来看看 《计算机科学概论(第11版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换