中国建设银行网站特色,景德镇市建设局网站,做英语题的网站,wordpress 购物导航网站【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 工业上用激光slam的多#xff0c;用视觉slam的少#xff0c;这是大家都知道的常识。毕竟对于工业来说#xff0c;健壮和稳定是我们必须要考虑的…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】 工业上用激光slam的多用视觉slam的少这是大家都知道的常识。毕竟对于工业来说健壮和稳定是我们必须要考虑的事情。但是图像slam在这过程当中其实也可以扮演十分重要的角色比如说地面如果非常有特征的话黄色路面或者绿色路面。这个时候即使全局的slam完成不了那么也可以实现局部道路的slam导航。 ros里面其实也谈到了opencv它是一个用的比较多的开发库。但是很多时候上面的demo都是比较割裂的很难说这是用于实际场景的代码。比如说平时比较常用的二维码导航上面就谈的不是很多。所以对于这些知识点我们都可以自己编写opencv程序来解决。 目前在ubuntu20.04上面ros noetic版本自带的是opencv 4版本了这个需要注意下了。另外实际图像开发的时候光源很重要。如果光源不满足条件可以自己编写代码比如利用最大灰度值做pwm的pid反馈参考量这都是有实际意义的。 1、编写测试代码 这段代码来自于网上。主要还是为了说明opencv如何编写代码有兴趣的同学可以去买一本opencv的书来进行学习和研究。
#include opencv4/opencv2/highgui/highgui.hpp
#include opencv4/opencv2/imgcodecs/legacy/constants_c.h
#include iostream
using namespace std;int main( int argc, char** argv ) {cv::Mat image;image cv::imread(test.jpg , CV_LOAD_IMAGE_COLOR); if(! image.data ) {std::cout Could not open or find the image std::endl ;return -1;}std::cout image wide: image.cols ,image high: image.rows ,image channels: image.channels() std::endl;/* display imagecv::namedWindow( Display window, cv::WINDOW_AUTOSIZE );cv::imshow( Display window, image ); cv::waitKey(0);*/size_t y,x;// y is row, x is colint c; // c is channely x 250;c 2;// row_ptr is the head point of y rowunsigned char *row_ptr image.ptrunsigned char(y);// data_ptr points to pixel dataunsigned char *data_ptr row_ptr[x * image.channels()]; unsigned char data data_ptr[c];// use cv::Mat::at() to get the pixel value// unsigned char is not printable// std::cout std::isprint(data)std::isprint(image.atcv::Vec3b(y,x)[c]) std::endl;std::cout pixel value at y, x ,cstatic_castunsigned(image.atcv::Vec3b(y,x)[c]) std::endl;return 0;
}2、代码说明 代码的内容不复杂主要就是打开一幅图片然后获取指定点的像素信息。当然这份代码只是起到抛砖引玉的作用真正用起来还需要和具体的场景关联起来。 3、编译方法 前面我们说过ros noetic里面支持的是opencv 4所以这里代码也是用opencv4的库进行编译的输入如下所示
g test.cpp -o test pkg-config --cflags --libs opencv4 4、测试和调试 代码测试的过程中还需要一张图片我们不妨去网上搜索一下lena的图片。她也是数字图像处理中用的最多的一张图片 这样程序和图片都准备好了执行后不出意外的话就可以看到这样的打印
shell$ ./test
image wide: 500,image high: 500,image channels: 3
pixel value at y, x ,c1775、python3实现图像处理 实际生产中一般是用python编写好算法之后再转换成c/c代码这样效率要高很多。另外不管是windows平台还是linux平台使用python都是很方便的。
import cv2def main():picture cv2.imread(./test.jpg)cv2.imshow(lena, picture)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ __main__:main() 运行的方法也比较简单直接输入python3 ./test.py即可。