Ask Your Question

newbie_Opencv's profile - activity

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;
    }



}