zoukankan      html  css  js  c++  java
  • 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;
    }

    好的 

    今天的就到这里结束啦

    大家好好学习,天天向上

  • 相关阅读:
    Constructor构造方法
    overload重载
    static关键字
    this关键字
    继承
    ORACLE数据库 常用命令和Sql常用语句
    常见单词
    L贪心基础
    J贪心
    K贪心
  • 原文地址:https://www.cnblogs.com/Loving-Q/p/11944897.html
Copyright © 2011-2022 走看看