2017-01-28 08:50:00 -0600
| asked a question | How to convert Mat inputFrame to 8UC3? Hello, I'd like to convert Mat inputFrame to 8UC3. But I don't know how to do it. Specificaly, I use javacamera and I want to convert inputFrame to 8UC3 and substitute inputFrame(8UC3) for mOutputFrame. Please let me know how to convert inputFrame to 8UC3. [my code that is using javacamera and opencv in android] ・・・
@Override
public void onCameraViewStarted(int width, int height) {
mOutputFrame = new Mat(width, height, CvType.CV_8UC3);
}
・・・
@Override
public Mat onCameraFrame(Mat inputFrame) throws UnsupportedEncodingException {
//I want to convert inputFrame to 8UC3 and substitute inputFrame(8UC3) for mOutputFrame.
}
return mOutputFrame;
}
|
2017-01-14 10:46:07 -0600
| commented question | How I can send the Mat image data ? The problem causes not only Socket communication but also the way of using OpenCV.
So the problem is complexly combined with each other . So I'd like to ask the comment from OpenCV's user. |
2017-01-14 10:43:14 -0600
| commented question | How I can send the Mat image data ? I want to send Mat data "mOutputFrame" but it does not success. Does the problem cause by image size? |
2017-01-14 10:33:35 -0600
| asked a question | How I can send the Mat image data ? my purpose is to send the Mat data of the android's display image from Android to PC . Both Android and PC has installed Opencv. I would like to directly send Mat data that is not exchange for the other data. But , I can't send the Mat data correctly. The PC is not capable of getting the data (that is to be Error in the middle of sending) and the sending speed is very slow(I displayed the recieved data in PC by using TCP test tool) and sometime freezes showing the data. Could you let me know the solution? My code package opencv.ooo.com.camera_opencv;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.WindowManager;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import java.io.BufferedOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
public class MainActivity extends Activity implements CameraBridgeViewBase.CvCameraViewListener {
private CameraBridgeViewBase mCameraView;
private Mat mOutputFrame;
private static final int PORT = 9250;
private static final String IP_ADDR = "111.111.111.11";
private volatile int Flag = 0;
private Socket socket;
private InputStream in;
private OutputStream out;
private StringBuffer Sendmessage;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
mCameraView.enableView();
try {
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
mCameraView = (CameraBridgeViewBase) findViewById(R.id.camera_view);
mCameraView.setCvCameraViewListener(this);
}
@Override
public void onPause() {
if (mCameraView != null) {
mCameraView.disableView();
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_4, this, mLoaderCallback);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Flag = 1;
System.out.println(Flag);
}
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
if (mCameraView != null) {
mCameraView.disableView();
}
}
@Override
public void onCameraViewStarted(int width, int height) {
// Mat(int rows, int cols, int type)
mOutputFrame = new Mat(width, height, CvType.CV_8UC3);
}
@Override
public void onCameraViewStopped() {
mOutputFrame.release();
}
@Override
public Mat onCameraFrame(Mat inputFrame) throws UnsupportedEncodingException {
Core.absdiff(inputFrame, new Scalar(0, 0, 0), mOutputFrame);
if (Flag == 1) {
Flag = 0;
String a = mOutputFrame.dump();
String b= a.replaceAll(";",",");
byte[] ds = a.getBytes("UTF8");
byte[] bytedata ="0".getBytes("UTF8");
Sendmessage=new StringBuffer();
Sendmessage.append("{"+"\""+"op"+"\""+":"+ "\""+"publish"+"\""+","+"\""+"msg"+"\""+":"+"{"+"\""+"header"+"\""+":"+"{"+"\""+"seq"+"\""+":"+0+","+"\""+"stamp"+"\""+":"+"{"+"\""+"secs"+"\""+":"+0+","+"\""+"nsecs"+"\""+":"+0+"}"+","+"\""+"frame_id"+"\""+":"+"\""+"ss"+"\""+"}"+","+"\""+"height"+"\""+":");
Sendmessage.append(mOutputFrame.height());
Sendmessage.append(","+"\""+"width"+"\""+":");
Sendmessage.append(mOutputFrame.width());
Sendmessage.append(","+"\""+"encoding"+"\""+":"+"\""+"bgr8"+"\""+","+"\""+"is_bigendian"+"\""+":"+0+","+"\""+"step"+"\""+":");
Sendmessage.append(mOutputFrame.width()*3);
Sendmessage.append(","+"\""+"data"+"\""+":");
Sendmessage.append(b);
Sendmessage.append("}"+","+"\""+"topic"+"\""+":"+"\""+"/camera/image"+"\""+"}");
String c1 = new String(Sendmessage);
System.out.println(c1);
try {
bytedata=c1.getBytes("UTF8");
sendData(bytedata);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return mOutputFrame;
}
private void sendData(final byte[] data) {
Thread thread = new Thread(new Runnable() {
public void run ... (more) |
2017-01-14 10:10:02 -0600
| asked a question | Error Sending Mat data via Socket communication Hello, my purpose is to send the Mat data of the android's display image from Android to PC . Both Android and PC has installed Opencv.
I would like to directly send Mat data that is not exchange for the other data.
But , I can't send the Mat data correctly. The PC is not capable of getting the data (that is to be Error in the middle of sending) and the sending speed is very slow(I displayed the recieved data in PC by using TCP test tool) and sometime freezes showing the data. Could you let me know the solution? My code package opencv.ros.com.camera_opencv;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.WindowManager;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import java.io.BufferedOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
public class MainActivity extends Activity implements CameraBridgeViewBase.CvCameraViewListener {
private CameraBridgeViewBase mCameraView;
private Mat mOutputFrame;
private static final int PORT = 9250;
private static final String IP_ADDR = "111.111.111.11";
private volatile int Flag = 0;
private Socket socket;
private InputStream in;
private OutputStream out;
private StringBuffer Sendmessage;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
mCameraView.enableView();
try {
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
mCameraView = (CameraBridgeViewBase) findViewById(R.id.camera_view);
mCameraView.setCvCameraViewListener(this);
}
@Override
public void onPause() {
if (mCameraView != null) {
mCameraView.disableView();
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_4, this, mLoaderCallback);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Flag = 1;
System.out.println(Flag);
}
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
if (mCameraView != null) {
mCameraView.disableView();
}
}
@Override
public void onCameraViewStarted(int width, int height) {
// Mat(int rows, int cols, int type)
mOutputFrame = new Mat(width, height, CvType.CV_8UC3);
}
@Override
public void onCameraViewStopped() {
mOutputFrame.release();
}
@Override
public Mat onCameraFrame(Mat inputFrame) throws UnsupportedEncodingException {
Core.absdiff(inputFrame, new Scalar(0, 0, 0), mOutputFrame);
if (Flag == 1) {
Flag = 0;
String a = mOutputFrame.dump();
String b= a.replaceAll(";",",");
byte[] ds = a.getBytes("UTF8");
byte[] bytedata ="0".getBytes("UTF8");
Sendmessage=new StringBuffer();
Sendmessage.append("{"+"\""+"op"+"\""+":"+ "\""+"publish"+"\""+","+"\""+"msg"+"\""+":"+"{"+"\""+"header"+"\""+":"+"{"+"\""+"seq"+"\""+":"+0+","+"\""+"stamp"+"\""+":"+"{"+"\""+"secs"+"\""+":"+0+","+"\""+"nsecs"+"\""+":"+0+"}"+","+"\""+"frame_id"+"\""+":"+"\""+"ss"+"\""+"}"+","+"\""+"height"+"\""+":");
Sendmessage.append(mOutputFrame.height());
Sendmessage.append(","+"\""+"width"+"\""+":");
Sendmessage.append(mOutputFrame.width());
Sendmessage.append(","+"\""+"encoding"+"\""+":"+"\""+"bgr8"+"\""+","+"\""+"is_bigendian"+"\""+":"+0+","+"\""+"step"+"\""+":");
Sendmessage.append(mOutputFrame.width()*3);
Sendmessage.append(","+"\""+"data"+"\""+":");
Sendmessage.append(b);
Sendmessage.append("}"+","+"\""+"topic"+"\""+":"+"\""+"/camera/image"+"\""+"}");
String c1 = new String(Sendmessage);
System.out.println(c1);
try {
bytedata=c1.getBytes("UTF8");
sendData(bytedata);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return mOutputFrame;
}
private void sendData(final byte[] data) {
Thread thread = new Thread(new Runnable() {
public void ... (more) |
2016-12-31 08:53:57 -0600
| asked a question | How to convert String data to byte data without Extra conversion I asked a question a few hours ago , as the following but The intended question is changed.
http://answers.opencv.org/question/12... So I newly ask a question in here. [Question]
I would like to equal the value of "ds" to the value of "a" in the following code. ・・・ Mat img2 = new Mat(new Size(85, 85),
CvType.CV_8UC3); String a = img2.dump();
byte[] ds = a.getBytes();
System.out.println(a); -----(A)
System.out.println(ds);------(B)
・・・ Actually, (A) and (B) is different from each other (A)'s output:
I/System.out: 244, 255, 249, 255, 243, 255, 248, 255, 247, 255, 245, ・・・ (B)'s output:
I/System.out: [B@4627b6a0 ・・・ The purpose of equaling the value of "ds" to the value of "a" is to send the ds's data via socket communication as the following: ・・・ socket = new Socket(IP_ADDR,
PORT); out = new
BufferedOutputStream(socket.getOutputStream());
out.write(ds); ・・・ then, I want not to send same value of (B) output but to send same value of (A) in byte data. If you know the solution of the problem ,Please let me know. |
2016-12-31 06:15:41 -0600
| commented question | How to convert Mat data to byte data in Andorid by using OpenCV Thank you. You just said , by using"System.out.println(img2.dump());" ,I can printout the data that I expect as the following.
ex.) data =[112,113,0,1,0,225,........] But , I'd like to convert the Mat data to byte data. |
2016-12-31 05:53:19 -0600
| commented question | How to convert Mat data to byte data in Andorid by using OpenCV Because I 'd like to send the byte date via TCP communication.
So, I'd like to convert Mat data to the byte array. |
2016-12-31 05:44:52 -0600
| received badge | ● Editor
(source)
|
2016-12-31 05:31:04 -0600
| asked a question | How to convert Mat data to byte data in Andorid by using OpenCV I'd like to convert Mat data to byte data by using OpencV. My expected data format is the following: ex.) data =[112,113,0,1,0,225,........] →1,0,225 is one layer CV_8UC3 but my code(System.outprint.ln(data)) is not equal to the above data format.
The Output value is "I/System.out: [B@43d1d008". How should I achieve the problem? My code:
・when I touch the screen, the Flag is to be set as "1";
then , in onCameraFrame, the Mat date is converted to byte data
and execute "System.outprint.ln" . package opencv.ros.com.camera_opencv;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.WindowManager;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import java.io.BufferedOutputStream;
public class MainActivity extends Activity implements CameraBridgeViewBase.CvCameraViewListener {
private CameraBridgeViewBase mCameraView;
private Mat mOutputFrame;
private volatile int Flag=0;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
mCameraView.enableView();
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
mCameraView = (CameraBridgeViewBase)findViewById(R.id.camera_view);
mCameraView.setCvCameraViewListener(this);
}
@Override
public void onPause() {
if (mCameraView != null) {
mCameraView.disableView();
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_4, this, mLoaderCallback);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN) {
Flag = 1;
System.out.println( Flag );
}
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
if (mCameraView != null) {
mCameraView.disableView();
}
}
@Override
public void onCameraViewStarted(int width, int height) {
// Mat(int rows, int cols, int type)
// rows: height, cols: width
mOutputFrame = new Mat(height, width, CvType.CV_8UC3);
}
@Override
public void onCameraViewStopped() {
mOutputFrame.release();
}
@Override
public Mat onCameraFrame(Mat inputFrame) {
Mat img2 = new Mat(new Size(85,85),CvType.CV_8UC3);
if(Flag==1){
Flag=0;
int bufferSize = img2.channels()*img2.cols()*img2.rows();
byte [] b = new byte[bufferSize];
img2.get(0,0,b); // get all the pixels
System.out.println(b);
}
return img2;
}
}
|