I am trying to get the LEGO EVE to work with OpenCV. I have a working LEGO sample and a working OpenCV sample. The problem comes when thing to merge the two samples. The video protocols are different. The lego video input is byte[] and the OpenCV output is Mat. I have tried conversion code from the blogs but have not gotten anything to work. How do I convert LEGO byte [] to OpenCV Mat? The two samples and my program follow …
LEGO sample
package my_PACKAGE;
import java.io.IOException; // PACKAGE
import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.Mat.*; import org.opencv.core.MatOfByte; import org.opencv.imgcodecs.Imgcodecs;
import lejos.hardware.Brick; import lejos.hardware.BrickFinder; // PACKAGE import lejos.hardware.Button; // PACKAGE import lejos.hardware.LocalBTDevice; import lejos.hardware.ev3.EV3; import lejos.hardware.lcd.Font; import lejos.hardware.lcd.GraphicsLCD; // PACKAGE import lejos.hardware.video.Video; // PACKAGE import lejos.hardware.video.YUYVImage; // PACKAGE
public class Black_White_Camera // CLASS
{ ///////////////////////////////////////////////////////////////////////////////////////////
//
private static final int WIDTH = 160; //
private static final int HEIGHT = 120; //
//
//
public static void main(String[] args) // METHOD //
//
{ ///////////////////////////////////////////////////////////////////////////////// //
// //
Brick MyBrick; // //
MyBrick = BrickFinder.getLocal(); // //
String MyType; // //
MyType = MyBrick.getType(); // //
if (MyType != "EV3") // //
{System.out.println("This is not an EV3"); // //
} // //
String MyName; // //
MyName = MyBrick.getName(); // //
LocalBTDevice MyIPAddressS; // //
MyIPAddressS = MyBrick.getBluetoothDevice(); // //
EV3 School_red_EV3; // //
School_red_EV3 = (EV3) BrickFinder.getLocal(); // //
// //
// Video Insten = School_red_EV3.getVideo(); // //
Video Insten; // //
Insten = School_red_EV3.getVideo(); // //
// //
// GraphicsLCD GraphicsScreen = BrickFinder.getDefault().getGraphicsLCD(); // //
GraphicsLCD GraphicsScreen; // //
GraphicsScreen = School_red_EV3.getGraphicsLCD(); // //
GraphicsScreen.setFont(Font.getSmallFont()); // //
// //
try // //
{ // //
Insten.open(WIDTH,HEIGHT); // //
} // //
// //
catch (IOException e) // //
{ ///////////////////////////////////////////// // //
// TODO Auto-generated catch block // // //
//e.printStackTrace(); // // //
System.out.println("Plug in camera"); // // //
System.err.println("Press any key ..."); // // //
System.out.println(""); // // //
System.out.println(""); // // //
System.out.println(""); // // //
System.out.println(""); // // //
System.out.println(""); // // //
Button.waitForAnyPress(); // // //
main(args); // // //
} ///////////////////////////////////////// // //
// //
byte[] Still; // //
Still = Insten.createFrame(); // //
YUYVImage img; // //
img = new YUYVImage(Still, WIDTH, HEIGHT); // // // //
int threshold = 128; // //
boolean auto = true; // //
System.out.println("3/6/2018"); // //
System.out.println(MyType); // //
System.out.println(MyName); // //
System.out.println(MyIPAddressS); // //
System.err.println("Press any key ..."); // //
Button.waitForAnyPress(); // //
System.out.println(""); // //
System.out.println(""); // //
System.out.println(""); // //
System.out.println(""); // //
System.out.println(""); // //
System.out.println(""); // //
System.out.println(""); // //
GraphicsScreen.clear(); // //
GraphicsScreen.refresh(); // //
String filename = ((args.length > 0) ? args[0] : "lena.jpg"); // //
while (!Button.ESCAPE.isDown()) // //
{ ////////////////////////////////////////////////// // //
// // //
try { // // //
Insten.grabFrame(Still); // // //
} catch (IOException e) { // // //
// TODO Auto-generated catch block // // //
e.printStackTrace(); // // //
main(args); // // //
} // // //
// // //
if (auto) // // //
threshold = img.getMeanY() + 10; // // //
img.display(GraphicsScreen, 0, 0, threshold); // // //
if (Button.UP.isDown()) // // //
// // //
{ ///////////////////////// // // //
// // // //
threshold++; // // // //
if (threshold > 255) // // // //
threshold = 255; // // // //
auto = false; // // // //
// // // //
} ///////////////////////// // // //
// // //
if (Button.DOWN.isDown()) // // //
// // //
{ /////////////////////// // // //
// // // //
threshold--; // // // //
if (threshold < 0) // // // //
threshold = 0; // // // //
auto = false; // // // //
// // // //
} /////////////////////// // // //
// // //
if (Button.ENTER.isDown()) // // //
// // //
{ ///////////////// // // //
// // // //
auto = true; // // // //
// // // //
} ///////////////// // // //
// // //
// // //
} ///////////////////////////////////////////////// // //
// //
try { // //
Insten.close(); // //
GraphicsScreen.clear(); // //
} catch (IOException e) { // //
// TODO Auto-generated catch block // //
e.printStackTrace(); // //
} // //
GraphicsScreen.clear(); // //
// //
} ///////////////////////////////////////////////////////////////////////////////// //
//
} //////////////////////////////////////////////////////////////////////////////////////////