测试一下cv::imread+cv::imshow是否正常。
需要用到make、cmake
main.cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
int main (int argc, const char **argv) {
const vector<string> paths = {"壁纸1.png", "壁纸2.png", "壁纸3.jpg"};
const string pref = "/home/hans/图片/";
for (string fname : paths) {
const string imgPath = pref + fname;
cout << imgPath << endl;
for (int key = 0; key != 27; key = cv::waitKey (10) ) {
cv::Mat srcImage = cv::imread (imgPath);
cv::imshow (fname, srcImage);
}
}
cv::waitKey (0);
cout << "exit" << endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required (VERSION 3.10)
project (opencv_hw)
find_package(OpenCV REQUIRED)
set(CMAKE_CXX_STANDARD 17)
include_directories(/usr/local/include)
add_executable (opencv_hw main.cpp)
target_link_libraries(opencv_hw ${OpenCV_LIBRARIES})
编译运行
mkdir build && cd build
cmake ..
make -j2 // 并行编译
./opencv_hw
运行正常。
常见错误
-
error: (-206) Unrecognized or unsupported array type in function cvGetMat
这也许是因为对应的路径不存在图片!
注意:C++的opencv是支持中文路径的!不需要怀疑这方面,也就是说不要轻信csdn上的说法。
-
根据games101的Assignment1.pdf:”如果没有对虚拟机的核心数进行过设置,可以在 Virtual Box 里点击“设
置”,在弹出的窗口中选择“系统—处理器”,然后就可以设置虚拟机的核心数了。“来设置内核个数,这样才能通过”-j2“进行并行编译。 -
~/图片
表示/home/<username>/图片
,可以在终端里用,但不能在代码里用。