小编vse*_*tor的帖子

使用OpenCV生成3d点(假设正面并行配置)

我目前正在尝试在OpenCV中生成立体图像对的3D点.据我所知,这已经完成了很多工作.

我知道我要假设的立体声设置的外部参数是正面并行配置(实际上,它并没有那么糟糕!).我知道焦距,基线,我将假设主要点作为图像的中心(我知道,我知道......).

我使用StereoSGBM计算了一个伪装的视差图,并在O'Reilly的Learning OpenCV书之后对Q矩阵进行了手工编码,该书指定:

Q = [ 1 0 0      -c_x
      0 1 0      -c_y
      0 0 0      f
      0 0 -1/T_x (c_x - c_x')/T_x ]
Run Code Online (Sandbox Code Playgroud)

我会认为(c_x,c_y)是主要点(我在图像坐标中指定),f是焦距(我用mm描述),而T_x是两个相机或基线之间的平移(我是也在mm中描述.

int type = CV_STEREO_BM_BASIC;
double rescx = 0.25, rescy = 0.25;
Mat disparity, vdisparity, depthMap;

Mat frame1 = imread( "C:\\Users\\Administrator\\Desktop\\Flow\\IMG137.jpg", CV_LOAD_IMAGE_GRAYSCALE );
Mat frame1L = frame1( Range( 0, frame1.rows ), Range( 0, frame1.cols/2 ));
Mat frame1R = frame1( Range( 0, frame1.rows ), Range( frame1.cols/2, frame1.cols ));

resize( frame1L, frame1L, Size(), rescx, rescy ); …
Run Code Online (Sandbox Code Playgroud)

3d opencv depth

7
推荐指数
1
解决办法
6279
查看次数

为什么kinect颜色和深度不能正确对齐?

我已经在这个问题上工作了很长一段时间,并且在我的创造力结束时,所以希望其他人可以帮助我指出正确的方向.我一直在使用Kinect并尝试将数据捕获到MATLAB.幸运的是,有很多方法可以这样做(我目前正在使用http://www.mathworks.com/matlabcentral/fileexchange/30242-kinect-matlab).当我试图将捕获的数据投影到3D时,我的传统方法给出了很差的重建结果.

简而言之,我最终为matlab编写了一个Kinect SDK包装器,用于执行重建和对齐.重建就像一场梦,但......

正如您在此处所看到的,我在对齐方面遇到了很多麻烦:

在此输入图像描述

请不要仔细看模型:(.

如您所见,对齐方式不正确.我不确定为什么会这样.我已经阅读了很多论坛,其他人使用相同的方法比我更成功.

我目前的管道是使用Kinect Matlab(使用Openni)捕获数据,使用Kinect SDK重建,然后使用Kinect SDK(通过NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution)进行对齐.我怀疑这可能是由于Openni,但我在使用Kinect SDK创建mex函数调用捕获方面收效甚微.

如果有人能指出我应该深入研究的方向,那将非常感激.

编辑:

图一我应该发布一些代码.这是我用于对齐的代码:

    /* The matlab mex function */
    void mexFunction( int nlhs, mxArray *plhs[], int nrhs, 
            const mxArray *prhs[] ){

        if( nrhs < 2 )
        {
            printf( "No depth input or color image specified!\n" );
            mexErrMsgTxt( "Input Error" );
        }

        int width = 640, height = 480;

        // get input depth data

        unsigned short *pDepthRow = ( unsigned short* ) mxGetData( prhs[0] );
        unsigned char *pColorRow …
Run Code Online (Sandbox Code Playgroud)

matlab colors alignment depth kinect

5
推荐指数
1
解决办法
5500
查看次数

在Android中使用OpenCV将NV21转换为RGB

我想在Android中使用OpenCV.所以我首先通过并排放置两个SurfaceView来测试OpenCV.一个SurfaceView用于从相机预览输出(输出格式显然是NV21).另一个SurfaceView在通过OpenCV后显示相同的预览,如下面的代码所示:

public void onPreviewFrame(byte[] data, Camera camera) {
    // TODO Auto-generated method stub

    if( mYuv != null ) mYuv.release();
    mYuv = new Mat( height + height/2, width, CvType.CV_8UC1 );
    mYuv.put( 0, 0, data);
    Mat mRgba = new Mat();

    Imgproc.cvtColor( mYuv, mRgba, Imgproc.COLOR_YUV2RGB_NV21, 4 );

    Bitmap map = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888 );

    Utils.matToBitmap( mRgba, map );

    preview.setBackgroundDrawable( new BitmapDrawable( map ));
    mRgba.release();

}
Run Code Online (Sandbox Code Playgroud)

但是通过OpenCV后产生的图像是一个绿色的,有条理的......事情:

绿色,有条不紊的东西

有任何想法吗?

编辑:

根据评论修改了一点代码.

public void onPreviewFrame(byte[] data, Camera camera) {
    // TODO Auto-generated method stub

    if( …
Run Code Online (Sandbox Code Playgroud)

java android opencv

4
推荐指数
1
解决办法
8148
查看次数

标签 统计

depth ×2

opencv ×2

3d ×1

alignment ×1

android ×1

colors ×1

java ×1

kinect ×1

matlab ×1