2019.11.26 图像变换的学习

美好的一个晚上从视觉工程开始

先来一个阈值化的程序和源代码

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;
}

好的 

今天的就到这里结束啦

大家好好学习,天天向上

猜你喜欢

转载自www.cnblogs.com/Loving-Q/p/11944897.html
今日推荐