我正在图像处理项目中工作,现在有一个问题,我导入了OpenCV库,然后将RGB帧转换为二进制帧。现在我不知道如何捕获二进制图像并将其存储在数据库中。没有有关OpenCV库的教程。因此,任何人都可以帮助我解决问题。我的编码如下。
public class MainActivity extends AppCompatActivity implements View.OnTouchListener,CameraBridgeViewBase.CvCameraViewListener2 {
private static final String TAG = MainActivity.class.getCanonicalName();
private CameraBridgeViewBase mOpenCvCameraView;
private Mat mRgba;
private Scalar mBlobColorHsv;
private Scalar mBlobColorRgba;
private Mat mIntermediateMat;
private Mat mGray;
Mat hierarchy;
List<MatOfPoint> contours;
private BaseLoaderCallback mLoaderCallback=new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
mOpenCvCameraView.setOnTouchListener(MainActivity.this);
}
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_KEEP_SCREEN_ON);
mOpenCvCameraView=(CameraBridgeViewBase)findViewById(R.id.opencv_tutorial_activity_surface_view);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
}
@Override
public void onPause(){
super.onPause();
if(mOpenCvCameraView!=null)
mOpenCvCameraView.disableView();
}
@Override
public void onResume(){
{
super.onResume();
if(!OpenCVLoader.initDebug()) {
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, this, mLoaderCallback);
}
else{
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
}
@Override
public void onDestroy(){
super.onPause();
if(mOpenCvCameraView!=null)
mOpenCvCameraView.disableView();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
@Override
public void onCameraViewStarted(int width, int height) {
mRgba=new Mat();
mBlobColorRgba=new Scalar(255);
mBlobColorHsv=new Scalar(255);
mRgba = new Mat(height, width, CvType.CV_8UC4);
mIntermediateMat = new Mat(height, width, CvType.CV_8UC4);
mGray = new Mat(height, width, CvType.CV_8UC1);
hierarchy = new Mat();
}
简而言之,我想做的是创建一个按钮,然后在onclick方法中我要捕获图像并必须显示图像预览。请有人帮助我解决此问题。提前致谢。
如果要预览图像,则必须将垫子转换为位图,然后在ImageView中显示它。您可以设置CvCameraViewListener来接收位图。像这样
private Mat mat;
private boolean showPreviews;
private BaseLoaderCallback mLoaderCallback=new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
someButton.setOnclickListener(new View.OnclickListener(View v){
showPreviews = !showPreviews;
});
mOpenCvCameraView.enableView();
mOpenCvCameraView.setOnTouchListener(MainActivity.this);
mOpenCvCameraView.setCvCameraViewListener(MainActivity.this);
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
@Override
public void onCameraViewStarted(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onCameraViewStopped() {
// TODO Auto-generated method stub
}
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
// TODO Auto-generated method stub
if(!showPreviews)
mat = inputFrame.rgba();
// you can return a modified mat if you want to display it in opencv
return mat;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句