一起做orb-slam(2)

时间:2021-11-22 02:57:58

1.ushort用法?

USHORT is a macro which is not part of the official C++ language (it's probably defined or typedef'ed somewhere). unsigned short is an official type defined by the C++ language as an integer that can at least hold numbers between 0 and 65535.

Use unsigned short and your code will be portable - don't use USHORT unless you company's coding standard requires it

USHORT是一个宏,它不是官方C ++语言的一部分(它可能是在某处定义或定义的)。 unsigned short是一种由C ++语言定义的正式类型,它是一个整数,它至少可以包含0到65535之间的数字。

使用无符号的short,你的代码将是可移植的 - 除非你公司的编码标准要求,否则不要使用USHORT

2. imread()

imread

Loads an image from a file.

C++: Mat imread(const string& filename, int flags=1 )
Python: cv2.imread(filename[, flags]) → retval
C: IplImage* cvLoadImage(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR )
C: CvMat* cvLoadImageM(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR )
Python: cv.LoadImage(filename, iscolor=CV_LOAD_IMAGE_COLOR) → None
Python: cv.LoadImageM(filename, iscolor=CV_LOAD_IMAGE_COLOR) → None
Parameters:
  • filename – Name of file to be loaded.
  • flags

    Flags specifying the color type of a loaded image:

    • CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
    • CV_LOAD_IMAGE_COLOR - If set, always convert image to the color one
    • CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
    • >0 Return a 3-channel color image.

      Note

      In the current implementation the alpha channel, if any, is stripped from the output image. Use negative value if you need the alpha channel.

    • =0 Return a grayscale image.
    • <0 Return the loaded image as is (with alpha channel).

      指定加载图像的颜色类型的标志:
                  CV_LOAD_IMAGE_ANYDEPTH - 如果设置,则当输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。
                  CV_LOAD_IMAGE_COLOR - 如果设置,则始终将图像转换为颜色
                  CV_LOAD_IMAGE_GRAYSCALE - 如果设置,则始终将图像转换为灰度图像

      > 0返回一个3通道彩色图像。

      注意

      在当前实现中,alpha通道(如果有的话)从输出图像中剥离。如果您需要Alpha通道,请使用负值。

      = 0返回灰度图像。
                  <0按原样返回加载的图像(带有Alpha通道)

The function imread loads an image from the specified file and returns it. If the image cannot be read (because of missing file, improper permissions, unsupported or invalid format), the function returns an empty matrix ( Mat::data==NULL ). Currently, the following file formats are supported:

  • Windows bitmaps - *.bmp, *.dib (always supported)
  • JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
  • JPEG 2000 files - *.jp2 (see the Notes section)
  • Portable Network Graphics - *.png (see the Notes section)
  • Portable image format - *.pbm, *.pgm, *.ppm (always supported)
  • Sun rasters - *.sr, *.ras (always supported)
  • TIFF files - *.tiff, *.tif (see the Notes section)

Note

  • The function determines the type of an image by the content, not by the file extension.
  • On Microsoft Windows* OS and MacOSX*, the codecs shipped with an OpenCV image (libjpeg, libpng, libtiff, and libjasper) are used by default. So, OpenCV can always read JPEGs, PNGs, and TIFFs. On MacOSX, there is also an option to use native MacOSX image readers. But beware that currently these native image loaders give images with different pixel values because of the color management embedded into MacOSX.
  • On Linux*, BSD flavors and other Unix-like open-source operating systems, OpenCV looks for codecs supplied with an OS image. Install the relevant packages (do not forget the development files, for example, “libjpeg-dev”, in Debian* and Ubuntu*) to get the codec support or turn on the OPENCV_BUILD_3RDPARTY_LIBS flag in CMake.
  • 该功能根据内容而不是文件扩展名来确定图像的类型。
        在Microsoft Windows * OS和MacOSX *上,缺省情况下使用OpenCV映像(libjpeg,libpng,libtiff和libjasper)附带的编解码器。所以,OpenCV总是可以读取JPEG,PNG和TIFF。在MacOSX上,还可以选择使用本机MacOSX图像阅读器。但要注意,由于嵌入到MacOSX中的颜色管理,当前这些原生图像加载器会为图像提供不同的像素值。
        在Linux *,BSD风格和其他类Unix开源操作系统上,OpenCV查找随操作系统映像提供的编解码器。安装相关软件包(不要忘记Debian *和Ubuntu *中的开发文件,例如“libjpeg-dev”)以获得编解码器支持或打开CMake中的OPENCV_BUILD_3RDPARTY_LIBS标志。

Note

In the case of color images, the decoded images will have the channels stored in B G R order.

在彩色图像的情况下,解码图像将以B G R顺序存储信道。

3. 最后执行main二进制文件时,提示权限不够。

louis@louis-lib:~/slam$ cd bin
louis@louis-lib:~/slam/bin$ ./main //执行main用“./main”格式
bash: ./main: 权限不够
louis@louis-lib:~/slam/bin$
    1. 打开超级终端,输入指令

      louis@louis-lib:~$ sudo gedit /etc/passwd

      sudo gedit /etc/passwd ,

      回车;找到我们用户名所在的那一行,将里面的当前用户的ID值进行修改。譬如我的当前用户是crystal。则找到了

    2. louis:x:1000:1000:louis,,,:/home/louis:/bin/bash  将两个1000改成0即可。即最后改完的结果为:

    3. louis:x:0:0:louis,,,:/home/louis:/bin/bash  最后将Ubuntu系统进行注销,然后在登陆的用户名里输入 你自己的用户名和密码,这样登陆上来就是root权限了。这是因为root的ID值为0。重新登陆之后打开超级终端发现我们的用户权限已经为root了。

      握草!!!我的用户没了,只留下guest用户,解决方案如链接http://13473996167.iteye.com/blog/2263734。

      最后还是重装了。。。