一、環境配置
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; }
學習中,持續更新....