内容简介: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 保存图像数据。
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处理摄像头画面(8)
- 8千个城市2千万摄像头暴露:2018摄像头安全报告
- Qt 实战:多画面播放器项目
- 如何构建一个简单的摄像头组件
- [译] 充分利用多摄像头 API
- html5调用手机摄像头
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。