一、环境配置
1、安装opencv
2、makefile编写
makefile模板,与c++文件在同一个目录下,用make指令生成可执行文件,然后运行。
TARGET=./demo #目标文件 SRCS:=$(wildcard ./src/*.cpp ./*.cpp) OBJS:=$(patsubst %cpp,%o,$(SRCS)) CFLG = -g -Wall -I/usr/local/include -Iinc -I./ -std=c++11 LDFG = -Wl,-rpath,/usr/local/lib -L./ -L/usr/local/lib -L./inc -lrt -lpthread -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio `pkg-config opencv --cflags --libs ` CXX = g++ $(TARGET) : $(OBJS) $(CXX) -o $(TARGET) $(OBJS) $(LDFG) %.o:%.cpp $(CXX) $(CFLG) -c $< -o $@ .PHONY : clean clean: -rm ./*.o -rm ./src/*.o -rm ./bin/*
3、cmake安装
cmake可以说是一个经过封装的makefile,先安装cmake,然后在CMakeLists.txt文件中更改参数就可以利用cmake指令创建makefile,然后再执行make指令生成可执行文件。
二、初识opencv
1、第一个程序:图像读取和图像显示
//显示图像dota.JPEG
1 #include<opencv2/opencv.hpp> 2 using namespace cv; 3 4 int main(int argc,char **argv) 5 { 6 Mat img=imread("dota.JPEG"); //Mat类 imread图像读取 7 namedWindow("logo"); //窗口创建 8 imshow("logo",img); //Mat类 imshow图像显示 9 waitKey(); 10 return 0; 11 }
2、图像腐蚀
//对图像bee,jpg腐蚀
1 #include <opencv2/opencv.hpp> 2 using namespace cv; 3 int main(int argc,char **argv) 4 { 5 Mat srcImg=imread("bee.jpg"); 6 imshow("begin",srcImg); 7 Mat element =getStructuringElement(MORPH_RECT,Size(5,5)); 8 Mat dstImg; 9 erode(srcImg,dstImg,element);//srcImg为原图 dstImg为腐蚀后的图 element为上面getStructuringElement(MORPH_RECT,Size(5,5)返回的值(内核矩阵) 10 imshow("after",dstImg); 11 waitKey(0); 12 return 0; 13 }


3、图像模糊
1 #include <opencv2/opencv.hpp> 2 using namespace cv; 3 int main(int argc,char **argv) 4 { 5 Mat srcImg=imread("social.jpg"); 6 imshow("begin",srcImg); 7 Mat dstImg; 8 blur(srcImg,dstImg,Size(8,8)); 9 imshow("after",dstImg); 10 waitKey(0); 11 return 0; 12 }


4、canny算子
#include <opencv2/opencv.hpp> using namespace cv; int main(int argc,char** argv) { Mat srcImg=imread("ox.jpg"); imshow("begin",srcImg); Mat grayImg,dstImg; cvtColor(srcImg,grayImg,CV_BGR2GRAY);//图像变为灰度图像 blur(grayImg,dstImg,Size(4,4));//图像模糊 Canny(dstImg,dstImg,3,3,3); imshow("after",dstImg); waitKey(0); return 0; }
5、摄像头读取处理
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat edges; VideoCapture capture(0);//从摄像头写入视频 capture.open(0); while(1){ Mat frame; capture>>frame;//读取当前帧 imshow("orginal",frame); cvtColor(frame,edges,COLOR_BGR2GRAY); blur(edges,edges,Size(6,6)); Canny(edges,edges,0,22,3); imshow("change",edges); waitKey(10); } return 0; }
学习中,持续更新....