视觉SLAM十四讲——ch7实践(视觉里程计1)

news/2025/2/13 0:40:55/

视觉SLAM十四讲----ch7的实践操作及避坑

  • 1. 实践操作前的准备工作
  • 2. 实践过程
    • 2.1 特征提取与匹配
    • 2.2 对极几何
    • 2.3 三角测量
    • 2.4 求解PnP
    • 2.5 求解ICP
  • 3. 遇到的问题
    • 3.1 准备工作遇到的问题

1. 实践操作前的准备工作

  1. 在终端中进入ch7文件夹下,顺序执行以下命令进行编译。
mkdir build
cd build
cmake ..
//注意,j8还是其他主要看自己的电脑情况
make -j8
  1. 在build文件中进行运行。
    注意: 在make的过程中可能会有一些警告,不过不会对最后造成影响。

2. 实践过程

2.1 特征提取与匹配

1. OpenCV的ORB特征
在build中执行语句: ./orb_cv /home/fighter/slam/slambook2/ch7/1.png /home/fighter/slam/slambook2/ch7/2.png(注意:为了避免不必要的麻烦,建议直接使用绝对路径
值得注意的是:这里的图像参数是在终端传入,如果不想传入也可以修改代码,通过代码直接获得。
运行结果:
ORB特征提取
特征匹配,效果较好的和所有的
在窗口显示的同时,终端输出以下信息:

extract ORB cost = 0.194423 seconds.
match ORB cost = 0.03702 seconds.
-- Max dist : 94.000000
-- Min dist : 4.000000

2. 手写ORB特征
在build中执行语句:./orb_self (注意:如果运行有误,找不到图片,记的去orb_self.cpp文件中更改图片路径
运行结果:
匹配点
与此同时,终端输出一些特征匹配的信息:

bad/total: 43/638
bad/total: 8/595
extract ORB cost = 0.0047491 seconds.
match ORB cost = 0.0013752 seconds.
matches: 41
done.

可以看出,特征提取只用了4.7毫秒,匹配只用了1.3毫秒。

2.2 对极几何

在build中执行语句: ./pose_estimation_2d2d /home/fighter/slam/slambook2/ch7/1.png /home/fighter/slam/slambook2/ch7/2.png
运行结果:

-- Max dist : 94.000000
-- Min dist : 4.000000
一共找到了79组匹配点
fundamental_matrix is
[4.54443750398184e-06, 0.0001333855576992603, -0.01798499246479044;-0.0001275657012964255, 2.266794804645652e-05, -0.01416678429206633;0.01814994639971766, 0.004146055870980492, 1]
essential_matrix is
[-0.008455114492964278, 0.05451570701059781, 0.1546375809484052;-0.008287154708445212, 0.03351311565984172, -0.6896472136971504;-0.1153993974485718, 0.6945899967012867, 0.02159624094256633]
homography_matrix is
[0.9261214237658335, -0.1445322040802305, 33.26921164265664;0.04535424230636757, 0.9386696658342905, 8.570980713233848;-1.006198269424755e-05, -3.008140685985328e-05, 1]
R is
[0.9956584940813579, -0.05615340406690447, 0.07423582945816433;0.05268846331440004, 0.9974645001566195, 0.04783823534446425;-0.07673388428334535, -0.0437191735855581, 0.9960926386957119]
t is
[-0.9726703113454949;-0.2153829834753195;0.08673313009645391]
t^R=
[0.01195733758736675, -0.07709685221674556, -0.2186905642298021;0.01171980658216709, -0.04739470268352609, 0.9753084428633267;0.1631993929614534, -0.9822985936236425, -0.03054169683725466]
epipolar constraint = [-0.0005617285518606241]
epipolar constraint = [0.002891683190146016]
epipolar constraint = [-0.0001941259398173245]
epipolar constraint = [0.003462947761727536]
epipolar constraint = [8.120001470268701e-06]
epipolar constraint = [0.002710644239222917]
epipolar constraint = [-0.001869251694575136]
epipolar constraint = [0.00139456385994044]
epipolar constraint = [0.001761227647336161]
epipolar constraint = [1.869571731462349e-06]
epipolar constraint = [-0.004004668139513667]
epipolar constraint = [0.002638369853227809]
epipolar constraint = [4.71865360582302e-06]
epipolar constraint = [0.002768559038208648]
epipolar constraint = [0.001230260274886132]
epipolar constraint = [-9.947439380264544e-07]
epipolar constraint = [-0.0002841959014567297]
epipolar constraint = [0.001139813094577335]
epipolar constraint = [0.002209250772744531]
epipolar constraint = [0.002850233510438394]
epipolar constraint = [-0.0009898447085951168]
epipolar constraint = [-5.94020961628694e-05]
epipolar constraint = [0.001896654223267416]
epipolar constraint = [0.001705775496444906]
epipolar constraint = [7.876819478169761e-06]
epipolar constraint = [-0.0001806518038049848]
epipolar constraint = [0.003204291493829357]
epipolar constraint = [-0.0006467971601622075]
epipolar constraint = [-0.0008445761906836491]
epipolar constraint = [-0.0002847958262359729]
epipolar constraint = [0.001126554642501526]
epipolar constraint = [0.001484320538271348]
epipolar constraint = [-0.002115865517619359]
epipolar constraint = [0.004033028487439499]
epipolar constraint = [0.000665497431603157]
epipolar constraint = [0.0005557219318915591]
epipolar constraint = [0.0007972861772887335]
epipolar constraint = [-0.001440067047765337]
epipolar constraint = [0.0003964624006285444]
epipolar constraint = [-0.0003556864447603059]
epipolar constraint = [0.001175277405117692]
epipolar constraint = [-0.001470809843158782]
epipolar constraint = [-0.0007155680024874544]
epipolar constraint = [0.003041807422365872]
epipolar constraint = [-0.000355171981926361]
epipolar constraint = [-7.065871935545143e-05]
epipolar constraint = [0.001191022361631378]
epipolar constraint = [-0.0007055167484525393]
epipolar constraint = [0.0004088281809971096]
epipolar constraint = [-0.000892980090616162]
epipolar constraint = [0.001026346981193374]
epipolar constraint = [0.001502989651308746]
epipolar constraint = [-0.001131199458784926]
epipolar constraint = [-0.003495250951856245]
epipolar constraint = [-0.0002070785253527191]
epipolar constraint = [0.0004211619083240026]
epipolar constraint = [0.004030229295353918]
epipolar constraint = [0.002423184222031846]
epipolar constraint = [-0.001799922916276332]
epipolar constraint = [0.00214236066535746]
epipolar constraint = [-0.001604766538417207]
epipolar constraint = [-0.00156708990112403]
epipolar constraint = [-0.002429487992740217]
epipolar constraint = [0.000401189111909464]
epipolar constraint = [-0.001494836576249617]
epipolar constraint = [-0.0003175435711454538]
epipolar constraint = [-0.007289352381657122]
epipolar constraint = [-0.003396636093576003]
epipolar constraint = [-0.004063091392346646]
epipolar constraint = [-0.00269429995497647]
epipolar constraint = [-0.003170213468765316]
epipolar constraint = [0.001227259432891176]
epipolar constraint = [-0.001403642253683501]
epipolar constraint = [0.006666696972492035]
epipolar constraint = [0.005653889777384447]
epipolar constraint = [0.0008830143247820065]
epipolar constraint = [-0.001103292290051336]
epipolar constraint = [-0.003982708195313309]
epipolar constraint = [-0.0053874915375101]

2.3 三角测量

在build中执行语句: ./triangulation /home/fighter/slam/slambook2/ch7/1.png /home/fighter/slam/slambook2/ch7/2.png

运行结果:
两个对比图
运行的同时,终端会输出:

-- Max dist : 94.000000
-- Min dist : 4.000000
一共找到了79组匹配点
depth: 8.95119
depth: 8.06918
depth: 10.3294
depth: 8.6317
depth: 8.17645
depth: 7.37573
depth: 11.8396
depth: 8.05226
depth: 8.08888
depth: 8.92732
depth: 8.17315
depth: 7.03846
depth: 8.17768
depth: 7.93303
depth: 9.0064
depth: 10.0725
depth: 12.2046
depth: 12.348
depth: 7.31126
depth: 8.03819
depth: 8.11742
depth: 8.80592
depth: 7.29207
depth: 10.3618
depth: 8.15175
depth: 8.25446
depth: 9.02341
depth: 7.1761
depth: 10.0498
depth: 10.0789
depth: 8.20269
depth: 8.74983
depth: 8.19139
depth: 8.55992
depth: 8.14039
depth: 7.13569
depth: 7.10316
depth: 11.8327
depth: 8.07921
depth: 10.1274
depth: 10.2183
depth: 11.9348
depth: 8.01726
depth: 8.23094
depth: 8.88643
depth: 8.25303
depth: 8.73167
depth: 8.71261
depth: 9.22772
depth: 8.76106
depth: 8.31465
depth: 8.92808
depth: 10.2404
depth: 8.44863
depth: 9.06756
depth: 8.10639
depth: 8.40526
depth: 8.74884
depth: 8.92165
depth: 9.13693
depth: 7.0544
depth: 8.8007
depth: 7.85402
depth: 8.72166
depth: 9.82223
depth: 10.5516
depth: 6.73889
depth: 8.60173
depth: 6.64584
depth: 6.66798
depth: 8.73605
depth: 8.18344
depth: 9.19246
depth: 8.94078
depth: 9.11707
depth: 8.76513
depth: 8.22164
depth: 7.17891
depth: 8.70631

2.4 求解PnP

在build中执行语句: ./pose_estimation_3d2d /home/fighter/slam/slambook2/ch7/1.png /home/fighter/slam/slambook2/ch7/2.png /home/fighter/slam/slambook2/ch7/1_depth.png /home/fighter/slam/slambook2/ch7/2_depth.png (注意:这里的参数是四个,两张图片,两张对应的深度图片
运行结果:

-- Max dist : 94.000000
-- Min dist : 4.000000
一共找到了79组匹配点
3d-2d pairs: 75
solve pnp in opencv cost time: 0.0552358 seconds.
R=
[0.9979059095501289, -0.05091940089111062, 0.03988747043647115;0.04981866254254162, 0.9983623157438141, 0.02812094175381178;-0.04125404886071617, -0.02607491352889358, 0.9988083912027663]
t=
[-0.1267821389556796;-0.008439496817594587;0.06034935748886031]
calling bundle adjustment by gauss newton
iteration 0 cost=40517.7576706
iteration 1 cost=410.547029116
iteration 2 cost=299.76468142
iteration 3 cost=299.763574327
pose by g-n:0.997905909549  -0.0509194008562   0.0398874705187   -0.1267821390960.049818662505    0.998362315745   0.0281209417649 -0.00843949683874-0.0412540489424  -0.0260749135374    0.998808391199   0.06034935752290                 0                 0                 1
solve pnp by gauss newton cost time: 0.0001665 seconds.
calling bundle adjustment by g2o
iteration= 0     chi2= 410.547029        time= 2.15e-05  cumTime= 2.15e-05       edges= 75       schur= 0
iteration= 1     chi2= 299.764681        time= 1.26e-05  cumTime= 3.41e-05       edges= 75       schur= 0
iteration= 2     chi2= 299.763574        time= 1.19e-05  cumTime= 4.6e-05        edges= 75       schur= 0
iteration= 3     chi2= 299.763574        time= 1.14e-05  cumTime= 5.74e-05       edges= 75       schur= 0
iteration= 4     chi2= 299.763574        time= 1.23e-05  cumTime= 6.97e-05       edges= 75       schur= 0
iteration= 5     chi2= 299.763574        time= 1.36e-05  cumTime= 8.33e-05       edges= 75       schur= 0
iteration= 6     chi2= 299.763574        time= 1.13e-05  cumTime= 9.46e-05       edges= 75       schur= 0
iteration= 7     chi2= 299.763574        time= 1.23e-05  cumTime= 0.0001069      edges= 75       schur= 0
iteration= 8     chi2= 299.763574        time= 1.14e-05  cumTime= 0.0001183      edges= 75       schur= 0
iteration= 9     chi2= 299.763574        time= 1.28e-05  cumTime= 0.0001311      edges= 75       schur= 0
optimization costs time: 0.001120401 seconds.
pose estimated by g2o =0.99790590955  -0.0509194008911   0.0398874704367   -0.1267821389560.0498186625425    0.998362315744   0.0281209417542 -0.00843949681823-0.0412540488609  -0.0260749135293    0.998808391203   0.06034935748880                 0                 0                 1
solve pnp by g2o cost time: 0.001277401 seconds.

2.5 求解ICP

在build中执行语句: ./pose_estimation_3d3d /home/fighter/slam/slambook2/ch7/1.png /home/fighter/slam/slambook2/ch7/2.png /home/fighter/slam/slambook2/ch7/1_depth.png /home/fighter/slam/slambook2/ch7/2_depth.png
运行结果:

  • 以calling bundle adjustment为界,calling bundle adjustment上面的运行结果是用SVD方法来求解的,calling bundle adjustment以下是非线性优化方法。
-- Max dist : 94.000000
-- Min dist : 4.000000
一共找到了79组匹配点
3d-3d pairs: 72
W=  10.871 -1.01948  2.54771
-2.16033  3.85307 -5.777423.94738 -5.79979  9.62203
U=  0.558087  -0.829399 -0.0252034-0.428009  -0.313755   0.8475650.710878   0.462228   0.530093
V=  0.617887  -0.784771 -0.0484806-0.399894  -0.366747   0.8399890.676979   0.499631   0.540434
ICP via SVD results:
R = [0.9969452351705235, 0.0598334759429696, -0.05020112774999549;-0.05932607556034211, 0.9981719680327525, 0.01153858709846634;0.05079975225724825, -0.008525103530306, 0.9986724727258676]
t = [0.1441598281917405;-0.06667849447794799;-0.03009747343724256]
R_inv = [0.9969452351705235, -0.05932607556034211, 0.05079975225724825;0.0598334759429696, 0.9981719680327525, -0.008525103530306;-0.05020112774999549, 0.01153858709846634, 0.9986724727258676]
t_inv = [-0.1461462830262246;0.0576744363694081;0.03806387978797152]
calling bundle adjustment
iteration= 0     chi2= 1.816112  time= 2.33e-05  cumTime= 2.33e-05       edges= 72       schur= 0        lambda= 0.000758        levenbergIter= 1
iteration= 1     chi2= 1.815514  time= 2.02e-05  cumTime= 4.35e-05       edges= 72       schur= 0        lambda= 0.000505        levenbergIter= 1
iteration= 2     chi2= 1.815514  time= 1.24e-05  cumTime= 5.59e-05       edges= 72       schur= 0        lambda= 0.000337        levenbergIter= 1
iteration= 3     chi2= 1.815514  time= 1.09e-05  cumTime= 6.68e-05       edges= 72       schur= 0        lambda= 0.000225        levenbergIter= 1
iteration= 4     chi2= 1.815514  time= 2.02e-05  cumTime= 8.7e-05        edges= 72       schur= 0        lambda= 0.000150        levenbergIter= 1
iteration= 5     chi2= 1.815514  time= 1.91e-05  cumTime= 0.0001061      edges= 72       schur= 0        lambda= 0.000299        levenbergIter= 1
optimization costs time: 0.000488299 seconds.after optimization:
T=0.996945  0.0598335 -0.0502011    0.14416
-0.0593261   0.998172  0.0115386 -0.06667850.0507998 -0.0085251   0.998672 -0.03009790          0          0          1
p1 = [-0.243698, -0.117719, 1.5848]
p2 = [-0.297211, -0.0956614, 1.6558]
(R*p2+t) = [-0.2409901495364605;-0.1254270500587826;1.609221205029395]p1 = [0.402045, -0.341821, 2.2068]
p2 = [0.378811, -0.262859, 2.2196]
(R*p2+t) = [0.3946591022539743;-0.3259188829495218;2.20803983035825]p1 = [-0.522843, -0.214436, 1.4956]
p2 = [-0.58581, -0.208584, 1.6052]
(R*p2+t) = [-0.532923946912698;-0.2216052393093164;1.54499035805527]p1 = [-0.627753, 0.160186, 1.3396]
p2 = [-0.709645, 0.159033, 1.4212]
(R*p2+t) = [-0.6251478068660965;0.1505624195985039;1.351809862638435]p1 = [0.594266, -0.0256024, 1.5332]
p2 = [0.514795, 0.0391393, 1.5332]
(R*p2+t) = [0.582755696243957;-0.04046060384335358;1.526884519595548]

3. 遇到的问题

3.1 准备工作遇到的问题

  1. 问题: 再cmake …过程中出现以下错误:
CMake Error at CMakeLists.txt:9 (find_package):Could not find a configuration file for package "OpenCV" that is compatiblewith requested version "3".The following configuration files were considered but not accepted:/usr/local/lib/cmake/opencv4/OpenCVConfig.cmake, version: 4.5.0/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake, version: 4.2.0/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake, version: 4.2.0

解决办法:
出现此种问题主要是代码中的opencv的版本和自己当前安装的版本不同,更改CMakeLists.txt文件中的opencv版本即可。

//更改前:
find_package(OpenCV 3 REQUIRED)
//更改后:
find_package(OpenCV REQUIRED)
  1. 问题: make -j8时出现以下错误
/home/fighter/slam/slambook2/ch7/pose_estimation_2d2d.cpp: In function ‘int main(int, char**)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_2d2d.cpp:36:31: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope36 |   Mat img_1 = imread(argv[1], CV_LOAD_IMAGE_COLOR);|                               ^~~~~~~~~~~~~~~~~~~
/home/fighter/slam/slambook2/ch7/pose_estimation_2d2d.cpp: In function ‘void pose_estimation_2d2d(std::vector<cv::KeyPoint>, std::vector<cv::KeyPoint>, std::vector<cv::DMatch>, cv::Mat&, cv::Mat&)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_2d2d.cpp:143:61: error: ‘CV_FM_8POINT’ was not declared in this scope143 |   fundamental_matrix = findFundamentalMat(points1, points2, CV_FM_8POINT);|                                                             ^~~~~~~~~~~~
make[2]: *** [CMakeFiles/pose_estimation_2d2d.dir/build.make:63: CMakeFiles/pose_estimation_2d2d.dir/pose_estimation_2d2d.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:140: CMakeFiles/pose_estimation_2d2d.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/home/fighter/slam/slambook2/ch7/triangulation.cpp: In function ‘int main(int, char**)’:
/home/fighter/slam/slambook2/ch7/triangulation.cpp:44:31: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope44 |   Mat img_1 = imread(argv[1], CV_LOAD_IMAGE_COLOR);|                               ^~~~~~~~~~~~~~~~~~~
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp: In member function ‘virtual bool VertexPose::read(std::istream&)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp:59:44: warning: no return statement in function returning non-void [-Wreturn-type]59 |   virtual bool read(istream &in) override {}|                                            ^
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp: In member function ‘virtual bool VertexPose::write(std::ostream&) const’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp:61:52: warning: no return statement in function returning non-void [-Wreturn-type]61 |   virtual bool write(ostream &out) const override {}|                                                    ^
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp: In function ‘int main(int, char**)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp:54:31: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope54 |   Mat img_1 = imread(argv[1], CV_LOAD_IMAGE_COLOR);|                               ^~~~~~~~~~~~~~~~~~~
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp:64:28: error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope64 |   Mat d1 = imread(argv[3], CV_LOAD_IMAGE_UNCHANGED);       // 深度图为16位无符号数,单通道图像|                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp: In member function ‘virtual bool EdgeProjectXYZRGBDPoseOnly::read(std::istream&)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp:84:27: warning: no return statement in function returning non-void [-Wreturn-type]84 |   bool read(istream &in) {}|                           ^
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp: In member function ‘virtual bool EdgeProjectXYZRGBDPoseOnly::write(std::ostream&) const’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp:86:35: warning: no return statement in function returning non-void [-Wreturn-type]86 |   bool write(ostream &out) const {}|                                   ^
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp: In function ‘int main(int, char**)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp:98:31: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope98 |   Mat img_1 = imread(argv[1], CV_LOAD_IMAGE_COLOR);|                               ^~~~~~~~~~~~~~~~~~~
/home/fighter/slam/slambook2/ch7/pose_estimation_3d3d.cpp:107:32: error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope107 |   Mat depth1 = imread(argv[3], CV_LOAD_IMAGE_UNCHANGED);       // 深度图为16位无符号数,单通道图像|                                ^~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/triangulation.dir/build.make:63: CMakeFiles/triangulation.dir/triangulation.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:113: CMakeFiles/triangulation.dir/all] Error 2
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp: In member function ‘virtual bool VertexPose::read(std::istream&)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp:262:44: warning: no return statement in function returning non-void [-Wreturn-type]262 |   virtual bool read(istream &in) override {}|                                            ^
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp: In member function ‘virtual bool VertexPose::write(std::ostream&) const’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp:264:52: warning: no return statement in function returning non-void [-Wreturn-type]264 |   virtual bool write(ostream &out) const override {}|                                                    ^
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp: In member function ‘virtual bool EdgeProjection::read(std::istream&)’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp:298:44: warning: no return statement in function returning non-void [-Wreturn-type]298 |   virtual bool read(istream &in) override {}|                                            ^
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp: In member function ‘virtual bool EdgeProjection::write(std::ostream&) const’:
/home/fighter/slam/slambook2/ch7/pose_estimation_3d2d.cpp:300:52: warning: no return statement in function returning non-void [-Wreturn-type]300 |   virtual bool write(ostream &out) const override {}|                                                    ^
make[2]: *** [CMakeFiles/pose_estimation_3d3d.dir/build.make:63: CMakeFiles/pose_estimation_3d3d.dir/pose_estimation_3d3d.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:167: CMakeFiles/pose_estimation_3d3d.dir/all] Error 2
make[2]: *** [CMakeFiles/pose_estimation_3d2d.dir/build.make:63: CMakeFiles/pose_estimation_3d2d.dir/pose_estimation_3d2d.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:86: CMakeFiles/pose_estimation_3d2d.dir/all] Error 2

也就是下图所示:
make时出现的问题
问题原因: 出现此类问题主要是因为,CV_LOAD_IMAGE_COLOR 是 OpenCV 2.x 版本中使用的旧常量。
解决办法: 修改办法主要有两种,一种是添加头文件,另一种是修改代码。
办法一:添加头文件:#include <opencv2/imgcodecs/imgcodecs_c.h> 如果还是不行就试试这个(#include “opencv2/imgcodecs/legacy/constants_c.h”
办法二:在 OpenCV 3.x 及更高版本中,应该使用 IMREAD_COLOR 常量代替它。

注意1: 更多的有关opencv错误更改可参考以下文章:https://blog.csdn.net/qq_44164791/article/details/131210608?spm=1001.2014.3001.5501
注意2: 需要把所有报错的文件全部更改!!!


http://www.ppmy.cn/news/387905.html

相关文章

知乎视频发布软件使用方法视频

知乎视频发布软件使用方法视频&#xff0c;知乎批量发布软件效果怎么样 #小红书视频上传#抖音seo软件#网络推广#视频营销 软件有月卡、季卡、半年卡、年卡 【其中推荐&#xff1a;百家号 哔哩哔哩B站&#xff0c;微博等软件发帖】 服务时间&#xff1a;&#xff08;8&#xf…

element UI日历组件自定义操作设置农历、阳历、节日展示、单日操作

图例&#xff1a; 自定义calendar.js,其他页面直接引入就可以 /** * 1900-2100区间内的公历、农历互转 * charset UTF-8 * Author Jea杨(JJonlineJJonline.Cn) * Time 2014-7-21 * Time 2016-8-13 Fixed 2033hex、Attribution Annals * Time 2016-9-25 Fixed lunar …

跟我volatile从表面到底层

原文来自我的博客月泉的博客 食用该篇文章&#xff0c;作者建议你最好已经提前了解过&#xff1a;JMM以及CPU缓存一致性协议还有相关的内存屏障的知识并且能够理解CPU的乱序执行&#xff0c;如果作者理解不当&#xff0c;欢迎指出。 如果本文对你有所帮助不妨给 博客的Github点…

volatile从表面到底层

该篇文章讨论的议题&#xff1a; java语义上的volatile内存屏障JVM的实现生成的汇编指令如何保障的的可见性和有序性为什么volatile不能保证复合操作的原子性 java语义上的volatile 我们从一个很常见的案例开始出发 public class Test {public static void main(String[] a…

带卷积核的神经网络的迭代次数与收敛标准的关系

制作一个带有卷积核的神经网络让这个网络向1,0收敛,y[0]向1收敛&#xff0c;y[1]向0收敛。收敛标准用δ表示,当满足条件 while(Math.abs(y[0]-1)> δ || Math.abs(y[1]-0)> δ ) 网络开始迭代&#xff0c;本文尝试了1e-3到9e-7共21个收敛标准&#xff0c;记录每个收敛…

RSA攻击持续总结

RSA攻击持续总结 RSA算法描述 1、变量涉及 明文&#xff1a;m 密文&#xff1a;c 模数&#xff1a;n 大质数&#xff1a;p&#xff0c;q 欧拉函数值&#xff1a;r 密钥&#xff1a;d&#xff0c;e 2、算法流程 随机生成两个大质数p&#xff0c;qnp*qr(p-1)*(q-1)求e&#xf…

BDTC2017北京大数据技术大会参会心得

12月7、8、9号三天在北京参加了BDTC大会&#xff0c;主题是人工智能与大数据&#xff0c;除了第一天的全员大会外&#xff0c;我参加了第二天上午的大数据云服务、下午的知识图谱、第三天的机器学习论坛。在此做一个回顾&#xff0c;也希望能为未参加大会的朋友们分享从我个人角…

python量化交易入门 —— 主流股票数据源框架横向对比

这里写自定义目录标题 主流股票数据源框架横向对比配套视频数据源框架对比优缺点概述TuShare 特点AKShare 特点Efinance 特点Qstock 特点 主流股票数据源框架横向对比 配套视频 想通过视频学习该系列课程的小伙伴&#xff0c;可以点击这里 数据源框架对比 只从A股数据角度出…