├── README.md ├── 三帧帧差法 ├── 00.bmp ├── 01.bmp ├── 02.bmp ├── Laboratory_raw.avi ├── README.md ├── show_images │ ├── 图片.png │ └── 视频.png ├── 三帧帧差法 图片.cpp └── 三帧帧差法 视频.cpp ├── 人脸识别案例 ├── 1.jpg ├── 2.jpg ├── README.md ├── haarcascade_frontalface_alt.xml ├── show_images │ ├── flower.png │ ├── input.png │ └── result.png └── test.cpp ├── 图像分割 ├── Grabcut算法.cpp ├── Lena.jpg ├── README.md ├── show_images │ ├── Grabcut算法.png │ ├── 分水岭算法1.png │ ├── 分水岭算法2.png │ ├── 分水岭算法3.png │ ├── 均值漂移1.png │ ├── 均值漂移2.png │ └── 漫水填充.png ├── 分水岭算法.cpp ├── 均值漂移.cpp └── 漫水填充.cpp ├── 图像增强 ├── README.md ├── Test.jpg ├── show_images │ ├── 伽马变换.png │ ├── 原图像.png │ ├── 对数LOG变换.png │ └── 直方图均衡化.png ├── 伽马变换.cpp ├── 对数LOG变换.cpp └── 直方图均衡化.cpp ├── 图像边缘、角点和轮廓检测 ├── Fruits.jpg ├── README.md ├── show_images │ ├── Canny.png │ ├── Harris.png │ ├── Laplacian.png │ ├── Scharr.png │ ├── Sobel.png │ └── src.png └── test.cpp ├── 图片拼接 ├── README.md ├── lab03.cpp ├── pinjie1.jpg ├── pinjie2.jpg ├── pinjie3.jpg └── show_images │ ├── 拼接后.png │ └── 结果.png ├── 布匹瑕疵检测小思路 ├── README.md ├── show_images │ ├── binary_image.png │ ├── dilate.png │ ├── erode.png │ ├── rectangle-demo.png │ └── result.png ├── test_img.jpg └── xiaci.cpp ├── 抠图案例 ├── README.md ├── show_images │ ├── dst.png │ ├── mark.png │ ├── 修复后.png │ ├── 图片增强后.png │ └── 输入.png ├── test.cpp └── test2.jpg ├── 运动目标检测 ├── 01.cpp ├── 02.cpp ├── Laboratory_raw.avi ├── README.md ├── Test.mp4 └── show_images │ ├── 混合高斯模型.png │ └── 背景减除法.png └── 颜色直方图比较 ├── README.md ├── show.png └── test.cpp /README.md: -------------------------------------------------------------------------------- 1 | # opencv_demo 2 | 关于OpenCV的小案例:图像边缘、角点和轮廓检测;图像分割;图像增强;图片拼接;运动目标检测;颜色直方图比较;三帧帧差法;抠图案例;人脸识别案例;布匹瑕疵检测小思路 3 | 4 | ## 内容 5 | > * ### [图像边缘、角点和轮廓检测 ](./图像边缘、角点和轮廓检测) 6 | > * ### [图像分割 ](./图像分割) 7 | > * ### [图像增强 ](./图像增强) 8 | > * ### [图片拼接 ](./图片拼接) 9 | > * ### [运动目标检测 ](./运动目标检测) 10 | > * ### [颜色直方图比较 ](./颜色直方图比较) 11 | > * ### [三帧帧差法 ](./三帧帧差法) 12 | > * ### [抠图案例 ](./抠图案例) 13 | > * ### [人脸识别案例 ](./人脸识别案例) 14 | > * ### [布匹瑕疵检测小思路 ](./布匹瑕疵检测小思路) 15 | -------------------------------------------------------------------------------- /三帧帧差法/00.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/三帧帧差法/00.bmp -------------------------------------------------------------------------------- /三帧帧差法/01.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/三帧帧差法/01.bmp -------------------------------------------------------------------------------- /三帧帧差法/02.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/三帧帧差法/02.bmp -------------------------------------------------------------------------------- /三帧帧差法/Laboratory_raw.avi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/三帧帧差法/Laboratory_raw.avi -------------------------------------------------------------------------------- /三帧帧差法/README.md: -------------------------------------------------------------------------------- 1 | # 三帧帧差法 2 | 3 | ## 效果 4 | 5 | > ### 图片 6 | ![src](./show_images/图片.png) 7 | 8 | > ## 视频 9 | ![Canny](./show_images/视频.png) 10 | 11 | -------------------------------------------------------------------------------- /三帧帧差法/show_images/图片.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/三帧帧差法/show_images/图片.png -------------------------------------------------------------------------------- /三帧帧差法/show_images/视频.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/三帧帧差法/show_images/视频.png -------------------------------------------------------------------------------- /三帧帧差法/三帧帧差法 图片.cpp: -------------------------------------------------------------------------------- 1 | //����������������������ͷ�ļ� 2 | #include 3 | 4 | //�����ռ��������� 5 | using namespace cv; 6 | using namespace std; 7 | 8 | int main() 9 | { 10 | Mat src0,src1,src2,dst0,dst1,dst2,dst3,tempframe; 11 | src0=imread("00.bmp"); 12 | src1=imread("01.bmp");//����ͼ�� 13 | src2=imread("02.bmp"); 14 | 15 | cvtColor(src0,dst0,CV_BGR2GRAY); 16 | cvtColor(src1,dst1,CV_BGR2GRAY);//ת��Ϊ�Ҷ�ͼ 17 | cvtColor(src2,dst2,CV_BGR2GRAY); 18 | 19 | absdiff(dst0,dst1,dst1);//��֡�� 20 | absdiff(dst1,dst2,dst2);//��֡�� 21 | bitwise_and(dst1, dst2, dst3); 22 | 23 | threshold( dst3, tempframe, 20, 255, CV_THRESH_BINARY );//��ֵ��������Ϊ��ֵͼ 24 | dilate(tempframe, tempframe, Mat());//���� 25 | erode(tempframe, tempframe, Mat());//��ʴ 26 | 27 | //imshow("�Ҷ�ͼ", dst1); 28 | imshow("������ͼ", tempframe); 29 | 30 | 31 | waitKey(0); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /三帧帧差法/三帧帧差法 视频.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | using namespace cv; 4 | 5 | int main() 6 | { 7 | //������Ƶ 8 | VideoCapture capture("Laboratory_raw.avi"); 9 | //VideoCapture capture(0); 10 | 11 | Mat tempframe, currentframe, previousframe,difframe; 12 | Mat s3,difframe2,difframe3,tempframe2; 13 | Mat frame; 14 | int framenum = 0; 15 | //��ȡһ֡���� 16 | while (true) 17 | { 18 | if (!capture.isOpened()) 19 | { 20 | cout << "read video failure" << endl; 21 | return -1; 22 | } 23 | //tempframe = capture.read(frame); 24 | capture >> frame; 25 | imshow("ԭ��Ƶ", frame); 26 | previousframe = frame.clone(); 27 | 28 | capture >> frame; 29 | currentframe = frame.clone(); 30 | 31 | cvtColor(previousframe, previousframe, CV_BGR2GRAY); 32 | cvtColor(currentframe, currentframe, CV_BGR2GRAY); 33 | absdiff(currentframe, previousframe, difframe);//���������ֵ 34 | threshold(difframe, tempframe, 20, 255.0, CV_THRESH_BINARY); 35 | dilate(tempframe, tempframe, Mat());//���� 36 | erode(tempframe, tempframe, Mat());//��ʴ 37 | 38 | capture >> frame; 39 | s3 = frame.clone();//����֡ 40 | cvtColor(s3, s3, CV_BGR2GRAY); 41 | absdiff(previousframe, s3, difframe2);//���������ֵ 42 | bitwise_and(difframe, difframe2, difframe3); 43 | threshold(difframe3, tempframe2, 20, 255.0, CV_THRESH_BINARY); 44 | dilate(tempframe2, tempframe2, Mat());//���� 45 | erode(tempframe2, tempframe2, Mat());//��ʴ 46 | 47 | imshow("�˶�Ŀ�� ��֡֡�", tempframe); 48 | 49 | imshow("�˶�Ŀ�� ��֡֡�", tempframe2); 50 | 51 | waitKey(50); 52 | }//end while 53 | } 54 | -------------------------------------------------------------------------------- /人脸识别案例/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/人脸识别案例/1.jpg -------------------------------------------------------------------------------- /人脸识别案例/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/人脸识别案例/2.jpg -------------------------------------------------------------------------------- /人脸识别案例/README.md: -------------------------------------------------------------------------------- 1 | # 人脸识别案例 2 | 需要用到 haarcascade_frontalface_alt.xml 模块 3 | 4 | ### 需求 5 | 把图片上的小花自动抠下拉,并识别出人类,将小花P到人类相对应的位置上。 6 | 7 | > ### 原图 8 | ![src1](./1.jpg) 9 | ![src2](./2.jpg) 10 | 11 | 12 | > ### 最终效果 13 | ![input](./show_images/input.png) 14 | ![flower](./show_images/flower.png) 15 | ![result](./show_images/result.png) 16 | 17 | -------------------------------------------------------------------------------- /人脸识别案例/show_images/flower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/人脸识别案例/show_images/flower.png -------------------------------------------------------------------------------- /人脸识别案例/show_images/input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/人脸识别案例/show_images/input.png -------------------------------------------------------------------------------- /人脸识别案例/show_images/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/人脸识别案例/show_images/result.png -------------------------------------------------------------------------------- /人脸识别案例/test.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/人脸识别案例/test.cpp -------------------------------------------------------------------------------- /图像分割/Grabcut算法.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | using namespace cv; 6 | 7 | void MyShowImage(Mat Image, const string winName) 8 | { 9 | imshow(winName, Image); 10 | } 11 | void getBinMask(const Mat& comMask, Mat& binMask) 12 | { 13 | binMask.create(comMask.size(), CV_8UC1); 14 | binMask = comMask & 1; 15 | } 16 | 17 | int main(int argc, char** argv) 18 | { 19 | Mat image = imread("lena.jpg", 1); 20 | const string winName = "image"; 21 | MyShowImage(image, winName); 22 | 23 | Mat bg; Mat fg; 24 | Rect rect = Rect(47, 48, 408, 464); 25 | Mat mask, res; 26 | mask.create(image.size(), CV_8UC1); 27 | grabCut(image, mask, rect, bg, fg, 1, 0); 28 | 29 | Mat binMask; 30 | getBinMask(mask, binMask); 31 | image.copyTo(res, binMask); 32 | MyShowImage(res, winName); 33 | waitKey(0); 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /图像分割/Lena.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/Lena.jpg -------------------------------------------------------------------------------- /图像分割/README.md: -------------------------------------------------------------------------------- 1 | # 图像分割 2 | 3 | > ## 原图像 4 | ![原图像](./Lena.jpg) 5 | 6 | > ## 分水岭算法 7 | ![分水岭算法1](./show_images/分水岭算法1.png) 8 | ![分水岭算法2](./show_images/分水岭算法2.png) 9 | ![分水岭算法3](./show_images/分水岭算法3.png) 10 | 11 | > ## 漫水填充 12 | ![漫水填充](./show_images/漫水填充.png) 13 | 14 | > ## 均值漂移 15 | ![均值漂移1](./show_images/均值漂移1.png) 16 | ![均值漂移2](./show_images/均值漂移2.png) 17 | 18 | > ## Grabcut算法 19 | ![Grabcut算法](./show_images/Grabcut算法.png) -------------------------------------------------------------------------------- /图像分割/show_images/Grabcut算法.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/show_images/Grabcut算法.png -------------------------------------------------------------------------------- /图像分割/show_images/分水岭算法1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/show_images/分水岭算法1.png -------------------------------------------------------------------------------- /图像分割/show_images/分水岭算法2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/show_images/分水岭算法2.png -------------------------------------------------------------------------------- /图像分割/show_images/分水岭算法3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/show_images/分水岭算法3.png -------------------------------------------------------------------------------- /图像分割/show_images/均值漂移1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/show_images/均值漂移1.png -------------------------------------------------------------------------------- /图像分割/show_images/均值漂移2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/show_images/均值漂移2.png -------------------------------------------------------------------------------- /图像分割/show_images/漫水填充.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/show_images/漫水填充.png -------------------------------------------------------------------------------- /图像分割/分水岭算法.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像分割/分水岭算法.cpp -------------------------------------------------------------------------------- /图像分割/均值漂移.cpp: -------------------------------------------------------------------------------- 1 | #include "opencv2/highgui/highgui.hpp" 2 | #include "opencv2/core/core.hpp" 3 | #include "opencv2/imgproc/imgproc.hpp" 4 | using namespace cv; 5 | 6 | int main(int argc, char** argv) 7 | { 8 | Mat img = imread("lena.jpg"); //����ͼ��RGB��ͨ�� 9 | imshow("ԭͼ��",img); 10 | Mat res; //�ָ��ͼ�� 11 | int spatialRad = 50; //�ռ䴰�ڴ�С 12 | int colorRad = 50; //ɫ�ʴ��ڴ�С 13 | int maxPyrLevel = 2; //���������� 14 | pyrMeanShiftFiltering( img, res, spatialRad, colorRad, maxPyrLevel); //ɫ�ʾ���ƽ���˲� 15 | imshow("res",res); 16 | RNG rng = theRNG(); 17 | Mat mask( res.rows+2, res.cols+2, CV_8UC1, Scalar::all(0) ); //��ģ 18 | for( int y = 0; y < res.rows; y++ ) 19 | { 20 | for( int x = 0; x < res.cols; x++ ) 21 | { 22 | if( mask.at(y+1, x+1) == 0 ) //��0����Ϊ1����ʾ�Ѿ�������䣬���ٴ��� 23 | { 24 | Scalar newVal( rng(256), rng(256), rng(256) ); 25 | floodFill( res, mask, Point(x,y), newVal, 0, Scalar::all(5), Scalar::all(5) ); //ִ����ˮ��� 26 | } 27 | } 28 | } 29 | imshow("meanShiftͼ��ָ�", res ); 30 | waitKey(); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /图像分割/漫水填充.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace cv; 3 | 4 | int main() 5 | { 6 | Mat src = imread("Fruits.jpg"); 7 | imshow("��ԭʼͼ��", src); 8 | Rect ccomp; 9 | floodFill(src, Point(50, 300), Scalar(155, 255, 55), &ccomp, Scalar(20, 20, 20), Scalar(20, 20, 20)); 10 | imshow("��Ч��ͼ��", src); 11 | waitKey(0); 12 | return 0; 13 | } 14 | -------------------------------------------------------------------------------- /图像增强/README.md: -------------------------------------------------------------------------------- 1 | # 图像增强 2 | 3 | > ## 原图像 4 | ![原图像](./show_images/原图像.png) 5 | 6 | > ## 直方图均衡化 7 | ![直方图均衡化](./show_images/直方图均衡化.png) 8 | 9 | > ## 对数LOG变换 10 | ![对数LOG变换](./show_images/对数LOG变换.png) 11 | 12 | > ## 伽马变换 13 | ![伽马变换](./show_images/伽马变换.png) -------------------------------------------------------------------------------- /图像增强/Test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像增强/Test.jpg -------------------------------------------------------------------------------- /图像增强/show_images/伽马变换.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像增强/show_images/伽马变换.png -------------------------------------------------------------------------------- /图像增强/show_images/原图像.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像增强/show_images/原图像.png -------------------------------------------------------------------------------- /图像增强/show_images/对数LOG变换.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像增强/show_images/对数LOG变换.png -------------------------------------------------------------------------------- /图像增强/show_images/直方图均衡化.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像增强/show_images/直方图均衡化.png -------------------------------------------------------------------------------- /图像增强/伽马变换.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像增强/伽马变换.cpp -------------------------------------------------------------------------------- /图像增强/对数LOG变换.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace cv; 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | Mat image = imread("Test.jpg"); 8 | Mat imageLog(image.size(), CV_32FC3); 9 | for (int i = 0; i < image.rows; i++) 10 | { 11 | for (int j = 0; j < image.cols; j++) 12 | { 13 | imageLog.at(i, j)[0] = log(float(1 + image.at(i, j)[0])); 14 | imageLog.at(i, j)[1] = log(float(1 + image.at(i, j)[1])); 15 | imageLog.at(i, j)[2] = log(float(1 + image.at(i, j)[2])); 16 | } 17 | } 18 | //��һ����0~255 19 | normalize(imageLog, imageLog, 0, 255, CV_MINMAX); 20 | //ת����8bitͼ����ʾ 21 | convertScaleAbs(imageLog, imageLog); 22 | imshow("Soure", image); 23 | imshow("����LOG�任", imageLog); 24 | waitKey(); 25 | return 0; 26 | } -------------------------------------------------------------------------------- /图像增强/直方图均衡化.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | using namespace cv; 5 | 6 | int main(int argc, char *argv[]) 7 | { 8 | Mat image = imread("Test.jpg", 1); 9 | if (image.empty()) 10 | { 11 | std::cout << "��ͼƬʧ��,����" << std::endl; 12 | return -1; 13 | } 14 | imshow("ԭͼ��", image); 15 | Mat imageRGB[3]; 16 | split(image, imageRGB); 17 | for (int i = 0; i < 3; i++) 18 | { 19 | equalizeHist(imageRGB[i], imageRGB[i]); 20 | } 21 | merge(imageRGB, 3, image); 22 | imshow("ֱ��ͼ���⻯ͼ����ǿЧ��", image); 23 | waitKey(0); 24 | return 0; 25 | } -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/Fruits.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/Fruits.jpg -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/README.md: -------------------------------------------------------------------------------- 1 | # 图像边缘、角点和轮廓检测 2 | 3 | > ## 原图 4 | ![src](./show_images/src.png) 5 | 6 | > ## Canny 算子 7 | ![Canny](./show_images/Canny.png) 8 | 9 | > ## Harris 角点检测 10 | ![Harris](./show_images/Harris.png) 11 | 12 | > ## Laplacian 算子 13 | ![Laplacian](./show_images/Laplacian.png) 14 | 15 | > ## Sobel 滤波器 16 | ![Scharr](./show_images/Scharr.png) 17 | 18 | > ## Sobel 算子 19 | ![Sobel](./show_images/Sobel.png) 20 | -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/show_images/Canny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/show_images/Canny.png -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/show_images/Harris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/show_images/Harris.png -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/show_images/Laplacian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/show_images/Laplacian.png -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/show_images/Scharr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/show_images/Scharr.png -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/show_images/Sobel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/show_images/Sobel.png -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/show_images/src.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/show_images/src.png -------------------------------------------------------------------------------- /图像边缘、角点和轮廓检测/test.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图像边缘、角点和轮廓检测/test.cpp -------------------------------------------------------------------------------- /图片拼接/README.md: -------------------------------------------------------------------------------- 1 | # 图片拼接 2 | ## 原图 3 | ![src1](./pinjie1.jpg) 4 | ![src2](./pinjie2.jpg) 5 | ![src3](./pinjie3.jpg) 6 | 7 | ## 效果 8 | 9 | > ### 拼接后 10 | ![拼接后](./show_images/拼接后.png) 11 | 12 | > ## 结果 13 | ![结果](./show_images/结果.png) 14 | 15 | -------------------------------------------------------------------------------- /图片拼接/lab03.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图片拼接/lab03.cpp -------------------------------------------------------------------------------- /图片拼接/pinjie1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图片拼接/pinjie1.jpg -------------------------------------------------------------------------------- /图片拼接/pinjie2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图片拼接/pinjie2.jpg -------------------------------------------------------------------------------- /图片拼接/pinjie3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图片拼接/pinjie3.jpg -------------------------------------------------------------------------------- /图片拼接/show_images/拼接后.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图片拼接/show_images/拼接后.png -------------------------------------------------------------------------------- /图片拼接/show_images/结果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/图片拼接/show_images/结果.png -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/README.md: -------------------------------------------------------------------------------- 1 | # 布匹瑕疵检测小思路 2 | ### 真实生产环境中的一张样本图,该想法为本人拿到图片时的一个不需要太多计算且简单的一个想法! 3 | 4 | > ## 原图 5 | ![src](./test_img.jpg) 6 | 7 | 此图片为布匹在红外光相机照射下放大的一张样本图片 8 | 9 | ### 需求 10 | 检测出布匹中的漏织小孔 11 | 12 | ### 思路 13 | 将图片分割成若干个小正方形,每个正方形对象比对,通过调整正方形大小,来进行检测。详细思路不进行赘述,请阅读源代码。 14 | 15 | > ## binary image 16 | ![binary image](./show_images/binary_image.png) 17 | 18 | > ## erode 19 | ![erode](./show_images/erode.png) 20 | 21 | 22 | > ## dilate 23 | ![dilate](./show_images/dilate.png) 24 | 25 | > ## rectangle-demo 26 | ![rectangle-demo](./show_images/rectangle-demo.png) 27 | 28 | > ## 效果 29 | ![result](./show_images/result.png) 30 | 31 | -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/show_images/binary_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/布匹瑕疵检测小思路/show_images/binary_image.png -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/show_images/dilate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/布匹瑕疵检测小思路/show_images/dilate.png -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/show_images/erode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/布匹瑕疵检测小思路/show_images/erode.png -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/show_images/rectangle-demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/布匹瑕疵检测小思路/show_images/rectangle-demo.png -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/show_images/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/布匹瑕疵检测小思路/show_images/result.png -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/test_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/布匹瑕疵检测小思路/test_img.jpg -------------------------------------------------------------------------------- /布匹瑕疵检测小思路/xiaci.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/布匹瑕疵检测小思路/xiaci.cpp -------------------------------------------------------------------------------- /抠图案例/README.md: -------------------------------------------------------------------------------- 1 | # 抠图案例 2 | 3 | ## 原图 4 | ![src](./test2.jpg) 5 | ## 效果 6 | 7 | > ### 输入 8 | ![输入](./show_images/输入.png) 9 | 10 | > ## dst 11 | ![dst](./show_images/dst.png) 12 | 13 | > ## mark 14 | ![mark](./show_images/mark.png) 15 | 16 | > ## 修复后 17 | ![修复后](./show_images/修复后.png) 18 | 19 | > ## 图片增强后 20 | ![图片增强后](./show_images/图片增强后.png) 21 | 22 | -------------------------------------------------------------------------------- /抠图案例/show_images/dst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/抠图案例/show_images/dst.png -------------------------------------------------------------------------------- /抠图案例/show_images/mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/抠图案例/show_images/mark.png -------------------------------------------------------------------------------- /抠图案例/show_images/修复后.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/抠图案例/show_images/修复后.png -------------------------------------------------------------------------------- /抠图案例/show_images/图片增强后.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/抠图案例/show_images/图片增强后.png -------------------------------------------------------------------------------- /抠图案例/show_images/输入.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/抠图案例/show_images/输入.png -------------------------------------------------------------------------------- /抠图案例/test.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/抠图案例/test.cpp -------------------------------------------------------------------------------- /抠图案例/test2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/抠图案例/test2.jpg -------------------------------------------------------------------------------- /运动目标检测/01.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/运动目标检测/01.cpp -------------------------------------------------------------------------------- /运动目标检测/02.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace cv; 6 | using namespace std; 7 | 8 | int main() 9 | { 10 | //string videoFile = "Laboratory_raw.avi"; 11 | string videoFile = "Test.mp4"; 12 | VideoCapture capture; 13 | capture.open(videoFile); 14 | 15 | if (!capture.isOpened()) 16 | { 17 | cout << "read video failure" << endl; 18 | return -1; 19 | } 20 | 21 | //BackgroundSubtractorMOG2 mog; 22 | Ptr mog = createBackgroundSubtractorMOG2(); 23 | Mat foreground; 24 | Mat background; 25 | Mat frame; 26 | long frameNo = 0; 27 | while (capture.read(frame)) 28 | { 29 | ++frameNo; 30 | cout << frameNo << endl; 31 | // �˶�ǰ����⣬�����±��� 32 | mog->apply(frame, foreground, 0.01); 33 | // ��ʴ 34 | erode(foreground, foreground, Mat()); 35 | // ���� 36 | dilate(foreground, foreground, Mat()); 37 | mog->getBackgroundImage(background); // ���ص�ǰ����ͼ�� 38 | imshow("video", foreground); 39 | imshow("background", background); 40 | if (waitKey(25) > 0) 41 | { 42 | break; 43 | } 44 | } 45 | return 0; 46 | } 47 | -------------------------------------------------------------------------------- /运动目标检测/Laboratory_raw.avi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/运动目标检测/Laboratory_raw.avi -------------------------------------------------------------------------------- /运动目标检测/README.md: -------------------------------------------------------------------------------- 1 | # 三帧帧差法 2 | 3 | ## 效果 4 | 5 | > ### 背景减除法 6 | ![背景减除法](./show_images/背景减除法.png) 7 | 8 | > ## 混合高斯模型 9 | ![混合高斯模型](./show_images/混合高斯模型.png) 10 | 11 | -------------------------------------------------------------------------------- /运动目标检测/Test.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/运动目标检测/Test.mp4 -------------------------------------------------------------------------------- /运动目标检测/show_images/混合高斯模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/运动目标检测/show_images/混合高斯模型.png -------------------------------------------------------------------------------- /运动目标检测/show_images/背景减除法.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/运动目标检测/show_images/背景减除法.png -------------------------------------------------------------------------------- /颜色直方图比较/README.md: -------------------------------------------------------------------------------- 1 | # 颜色直方图比较 2 | 3 | > ## 结果 4 | ![show](./show.png) -------------------------------------------------------------------------------- /颜色直方图比较/show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/颜色直方图比较/show.png -------------------------------------------------------------------------------- /颜色直方图比较/test.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brant-lzh/opencv_demo/c7d5f292d7718a7938dc9f13528a7168aac31634/颜色直方图比较/test.cpp --------------------------------------------------------------------------------