美好的一个晚上从视觉工程开始
先来一个阈值化的程序和源代码
include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> #include <ctype.h> #include<stdlib.h> #include<stdio.h> #include<math.h> #include<opencv2/opencv.hpp> #include<string.h> #include<vector> using namespace cv; using namespace std; #define windowname "程序窗口" Mat picture, img,emm, camera; int main() { VideoCapture capture(0); while (100) { capture >> camera; cvtColor(camera, picture, COLOR_RGB2GRAY);//转换为灰度图像 threshold(picture, img, 130, 255, 1); threshold(picture, emm, 130, 255, 0); threshold(picture, img,130 , 255, 1); threshold(picture,emm, 130, 255, 0); imshow("original picture", camera); imshow("GRAy picture", picture); imshow("Dealed picture", img); imshow("contry picture", emm); waitKey(1); } return 0; }
下面嗯在写一下我对自适应阈值化的解释
也用代码的形式
/*自适应阈值化函数的解析***************************/ //C++: void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, // int adaptiveMethod, int thresholdType, int blockSize, double C) /* 这里我对各参数作一个中文说明! InputArray src:源图像 OutputArray dst:输出图像,与源图像大小一致 int adaptiveMethod:在一个邻域内计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C 。 ADAPTIVE_THRESH_MEAN_C的计算方法是计算出领域的平均值再减去第七个参数double C的值 ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出领域的高斯均值再减去第七个参数double C的值 int thresholdType:这是阈值类型,只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV 具体的请看官方的说明,这里不多做解释 int blockSize:adaptiveThreshold的计算单位是像素的邻域块,邻域块取多大,就由这个值作决定 double C:模式选择 自行百度 */
然后呢说以一下图像处理
canny()函数的用法
int main() {Mat picture, img, cammera; VideoCapture capture(0); while (1) { capture >> cammera; cvtColor(cammera, img, COLOR_RGB2GRAY); Canny(cammera, picture, 80, 190,3);//第二个参数与第一 个参数越大 边缘越稀松 imshow("dhhd", cammera); imshow("dh=hdhd", picture); imshow("dhhdhd", img); waitKey(1); } return 0; }
下面是Soble()函数的用法 /*记得在Vs里面去除注释*/
值得注意的是 Windows的窗口只可以使用不同的名称,否则会发生冲突
#include <opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace cv; VideoCapture capture(0); //Mat src; //int main() //{ // while (1) // { // //【0】创建 grad_x 和 grad_y 矩阵 // Mat grad_x, grad_y; // Mat abs_grad_x, abs_grad_y, dst; // // //【1】载入原始图 // // Mat src = imread("D//4.jpg"); //工程目录下应该有一张名为1.jpg的素材图 // capture >> src; // //【2】显示原始图 // imshow("【原始图】sobel边缘检测", src); // // ////【3】求 X方向梯度 // //Sobel(src, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT); // //convertScaleAbs(grad_x, abs_grad_x); // //imshow("【效果图】 X方向Sobel", abs_grad_x); // // //【4】求Y方向梯度 // Sobel(src, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT); // convertScaleAbs(grad_y, abs_grad_y);// 图像增强 // imshow("【效果图】Y方向Sobel", abs_grad_y); // // ////【5】合并梯度(近似) // //addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst); // //imshow("【效果图】整体方向Sobel", dst); // // waitKey(1); // } // return 0; //}
还有一段比较简单的,是刚刚学习的时候用的,也放出来
#include <opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace cv; Mat cinema, picture, img,hah; int main() { VideoCapture capture(0); while (1) { capture >> cinema; capture >> hah; cvtColor(cinema, cinema, COLOR_RGB2GRAY); Sobel(cinema,img, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT);//第五个参数后都有默认值 convertScaleAbs(img, picture); imshow("Dealed Picture", picture); imshow("Original Picture",hah); waitKey(1); } return 0; }
好的
今天的就到这里结束啦
大家好好学习,天天向上