系统为Ubuntu16.04。IDE为Clion 2018.3.4。OpenCV版本为3.4.6。
新建一个C++项目。
修改CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.13)
project(untitled3)
set(CMAKE_CXX_STANDARD 14)
find_package(OpenCV REQUIRED)
add_executable(untitled3 main.cpp)
target_link_libraries(untitled3 ${OpenCV_LIBS})
Clion直接使用项目相对路径会报错。
需要在run----->Edit Configurations, 修改Working Directory为当前项目目录。
编写代码如下:
#include <highgui.h>
const char *IMAGE_PATH = "image/dota2.jpeg";
const char *WINDOW_NAME = "Example1";
int main() {
IplImage *img = cvLoadImage(IMAGE_PATH);
cvNamedWindow(WINDOW_NAME, CV_WINDOW_AUTOSIZE);
cvShowImage(WINDOW_NAME, img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow(WINDOW_NAME);
return 0;
}
运行结果:
例子2
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat srcImg = imread("image/DOTA2.jpg");
imshow("原始图", srcImg);
cvWaitKey(0);
return 0;
}
运行结果:
例子3
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main() {
Mat srcImg = imread("image/DOTA2.jpg");
imshow("[原图]", srcImg);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImg;
erode(srcImg, dstImg, element);
imshow("效果图", dstImg);
cvWaitKey(0);
return 0;
}
运行结果:
例子4
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main() {
Mat srcImg = imread("image/DOTA2.jpg");
imshow("原图", srcImg);
Mat dstImg;
blur(srcImg, dstImg, Size(7, 7));
imshow("效果图", dstImg);
cvWaitKey(0);
return 0;
}
运行结果:
例子5
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main() {
const char *IMAGE_PATH = "image/DOTA2.jpg";
Mat srcImg = imread(IMAGE_PATH);
imshow("原图", srcImg);
Mat edge, grayImg;
cvtColor(srcImg, grayImg, COLOR_BGR2GRAY);
blur(grayImg, edge, Size(3, 3));
Canny(edge, edge, 3, 9, 3);
imshow("效果图", edge);
cvWaitKey(0);
return 0;
}
运行结果:
例子6
生成图像
#include <opencv2/opencv.hpp>
using namespace cv;
void createMat(Mat &mat) {
for (int i = 0; i < mat.rows; i++) {
for (int j = 0; j < mat.cols; j++) {
auto &bgr = mat.at<Vec3b>(i, j);
bgr[0] = saturate_cast<uchar>(i * j % UCHAR_MAX);
bgr[1] = saturate_cast<uchar>(j * i % UCHAR_MAX);
bgr[2] = saturate_cast<uchar>((i + j) % UCHAR_MAX);
}
}
}
int main() {
Mat mat(510, 510, CV_8UC3);
createMat(mat);
imshow("Picture", mat);
cvWaitKey(0);
return 0;
}
运行结果: