2019-06-20 17:39:55 matt45m 阅读数 261
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5395 人正在学习 去看看 贾志刚

前言

1.在OpenCV滤波和卷积算法中,在进行核运算的过程时候,矩阵边界拓展是一个非常重要的处理,OpenCV提供的函数copyMakeBorder()来拓展边界。
2.我的系统环境是Linux,加Qt creator,OpenCV的版本是3.30。

边界拓展

1.函数原型

void copyMakeBorder( InputArray src,  OutputArray dst, int top,  int bottom,  int left,  int right,  int borderType,const Scalar& value = Scalar()

参数说明:
src:输入的数组。
dst:输出的拓展边界后的数组。
top:在src上边界向上拓展的行数。
bottom:在src下边界向下拓展的行数。
left:在src的左边界向左拓展的列数。
right:在src的右边界向右拓展的列数。
borderType:扩充边缘的类型,OpenCV中给出以下几种方式:

  • BORDER_REPLICATE
  • BORDER_REFLECT
  • BORDER_REFLECT_101
  • BORDER_WRAP
  • BORDER_CONSTANT

value:使用的是BORDER_CONSTANT的时候,此处是指边界处填写的常数值。
2.代码演示

void addFrame(Mat &src, Mat &dst)
{
    if(src.empty())
    {
        return;
    }
    int extRows = 80;
    int extCols = 80;
    copyMakeBorder(src, dst, extRows, extRows, extCols, extCols, BORDER_REPLICATE);
}

为了更好的体现效果,我在原图的位置加了外接矩形。
BORDER_REPLICATE:复制边缘像素扩展边界
在这里插入图片描述
BORDER_REFLECT:通过镜像复制扩展边界

在这里插入图片描述
BORDER_CONSTANT:使用常量扩展边界
在这里插入图片描述
BORDER_WRAP:复制对边像素扩展边界
在这里插入图片描述

2016-03-05 12:45:16 u010899190 阅读数 767
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5395 人正在学习 去看看 贾志刚

主界面
主界面

原图
原图

方框滤波

均值滤波

高斯滤波

中值滤波

双边滤波

图像处理之滤波1代码

2015-01-29 13:35:26 Wolfwind521 阅读数 1160
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5395 人正在学习 去看看 贾志刚

最近用Qt+OpenCV写了个图像批处理小工具,把当中遇到的一些注意点记录下来,以备今后查阅。

首先说明一下我的系统平台版本:

Windows 8.0 x64

Qt 5.4 MSVC2013_OpenGL_32bit

OpenCV 2.4.8

其他平台应该大同小异


一、.pro文件 项目配置


1、平台及目录配置。


注意区分Release和Debug。有时需要清除工程甚至手动删掉整个编译后产生的Release或Debug目录,重新编译才起作用


win32{
    INCLUDEPATH += E:/Tools/opencv/build/include

    CONFIG(debug, release|debug):
    {
    LIBS += -LE:/Tools/opencv/build/x86/vc12/bin
    LIBS += -LE:/Tools/opencv/build/x86/vc12/lib \
        -lopencv_core248d \
        -lopencv_imgproc248d \
        -lopencv_highgui248d \
        -lopencv_features2d248d
    }
    
    CONFIG(release, release|debug):
    {
    LIBS += -LE:/Tools/opencv/build/x86/vc12/bin
    LIBS += -LE:/Tools/opencv/build/x86/vc12/lib \
        -lopencv_core248 \
        -lopencv_imgproc248 \
        -lopencv_highgui248 \
        -lopencv_features2d248
    }
}

2、关于 #ifdef _DEBUG

在Debug下想用imshow显示中间结果图片,但不知为何用 #ifdef QT_DEBUG 不起作用。于是只好修改.pro文件:

CONFIG(debug, release|debug):DEFINES += _DEBUG

然后程序中就可以

#ifdef _DEBUG
    imshow("Canny", image);
#endif

二、QString转std::string


我在windows下用imreadimwrite读写图像时,若文件路径中包含中文,用QStringtoStdString方法转出来的std::string会导致图像读写失败。

(奇怪的是在Mac OS X 下就没问题。。。)

网上查了一下,用一个笨办法解决。(不知道有没有更好的办法)


QTextCodec *code;
QString outFile;
...
code = QTextCodec::codecForName("gb18030");
cv::imwrite(code->fromUnicode(outFile).data(), out);

三、OpenCV像素操作

对于带BGR三个通道的图像,大家都知道像素操作可以用img.at<Vec3b>(j,i);

然而 i 跟 j  是行还是是列、是横坐标还是纵坐标,经常会搞错,造成访问越界。网上有些程序写的也是错的。

记住下面这个循环就好:

for(int y = 0; y < input.rows; y++){
        for(int x = 0; x < input.cols; x++){
            for(int c=0; c<3; c++){
                int value = input.at<Vec3b>(y,x)[c];
            }
        }
    }


所以at()函数的第一个参数是纵坐标(也就是行号),第二个参数是横坐标(也就是列号)


四、图像区域拷贝


要把图像B的矩形区域B拷贝到图像A的矩形区域A(图像A、B尺寸可不同,但矩形区域A、B需相同):



Mat aux = ImgA.colRange(rectA.tl().x, rectA.br().x).rowRange(rectA.tl().y, rectA.br().y);

ImgB.colRange(rectB.tl().x, rectB.br().x).rowRange(rectB.tl().y, rectB.br().y).copyTo(aux);


2019-08-05 17:28:08 z634863434 阅读数 30
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5395 人正在学习 去看看 贾志刚

前言

本文使用的环境为:Qt5.11 + OpenCV3.4.6
环境安装参考文档:https://blog.csdn.net/z634863434/article/details/89950961

概念

图像模糊从字面上理解,就是将一张清晰的图像变的模糊不清。在图像处理中,模糊可以理解为对每个像素进行滤波或者平滑处理,使得图像内部和边缘都变得平滑,边界不清晰。图像模拟主要可以用来突显出图像中的明显的特征点,通过模糊我们可以对图像进行特征点的提取或者做运动模糊的功能。而在做图像模糊处理时候,其本质为给图像进行降噪处理,在数学上使用的卷积方式实现,常用的有以下4种方法:均值滤波、高斯滤波、中值滤波以及双边滤波。

均值滤波(归一化盒子滤波)

均值滤波取掩模矩阵大小内所有像素点的平均值赋予给中心像素点,该方法对于边缘值无法进行处理。具体解释如下:
假设有6X6的图像像素点矩阵,在6X6矩阵上有一个3X3的小矩阵,依次从左右向右,再从上往下移动。将3X3矩阵中所有点求和取平均值后,赋值给3X3中的红点,向左移动直到将6X6图像中的像素点全部处理完成。
在这里插入图片描述
数学公式如下:
在这里插入图片描述
如上图1中心点数经过均值模糊后为(2+6+4+1+7+3+1+2+2)/ 9 = 3

API函数:

void cv::blur ( InputArray  src,
				OutputArray  dst,
				Size  	ksize,
				Point  	anchor = Point(-1,-1),
				int  	borderType = BORDER_DEFAULT 
	) 	

作用:均值滤波,图像均值模糊处理

输入参数 参数定义
src 输入图像
dst 输出图像
ksize 模糊核大小
anchor 锚点,(-1,-1)为中心点
borderType 边框模式用于推断图像外部的像素

高斯滤波

高斯滤波对图像处理的过程与均值滤波类似,但高斯滤波符合正态分布,在计算矩阵值时,不再通过平均值的方法计算像素点,而是通过正态分布的方法进行计算,其本质上是对掩模矩阵中的所有像素值进行加权平均,虽然高斯滤波克服了部分丢失边缘像素的缺陷,但由于高斯滤波在计算时,不考虑像素值的不同,因此无法完全避免。

数学公式如下:
在这里插入图片描述
API函数:

void cv::GaussianBlur ( InputArray  	src,
						OutputArray  	dst,
						Size  	ksize,
						double  	sigmaX,
						double  	sigmaY = 0,
						int  	borderType = BORDER_DEFAULT 
	) 	

作用:高斯滤波,图像高斯模糊处理

输入参数 参数定义
src 输入图像
dst 输出图像
ksize 模糊核大小,但它们必须是正的和奇数的
sigmaX X方向上的高斯核标准差
sigmaY Y方向上的高斯核标准差
borderType 边框模式用于推断图像外部的像素

中值滤波

高斯滤波对图像处理的过程与均值滤波类似,在计算矩阵值时,不再通过平均值的方法计算像素点,而是通过取中值的方法进行计算。该方法对于椒盐噪声(极大值、极小值)有很好的抑制作用,但对边缘化像素处理仍然不够完善。
如果一个3X3矩阵中为2、6、4、1、7、3、1、2、2,经过从小到大的排列1、1、2、2、2、3、4、6、7,则中值则取2,像素点赋值为2.

API函数:

void cv::medianBlur (   InputArray  	src,
						OutputArray  	dst,
						int  	ksize 
	) 	

作用:中值滤波,图像中值模糊处理

输入参数 参数定义
src 输入图像
dst 输出图像
ksize 孔径线性尺寸;它必须是奇数并且大于1

双边滤波

高斯双边滤波为了完善高斯滤波的缺点,是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓的不变。相对于只考虑空间核的高斯滤波,双边滤波加入了值域核,从而将像素值相差过大的值进行保留处理,其多数用于美艳照片上。
在这里插入图片描述
API函数:

void cv::bilateralFilter (  InputArray  	src,
							OutputArray  	dst,
							int  	d,
							double  	sigmaColor,
							double  	sigmaSpace,
							int  	borderType = BORDER_DEFAULT 
	) 		

作用:双边滤波,图像双边模糊处理

输入参数 参数定义
src 输入图像
dst 输出图像
d 用于滤波的每个像素邻域的直径,直径内的所有像素均会被纳入计算。如果它是非正数,则从sigmaSpace计算
sigmaColor 决定多少差值内的像素会被计算
sigmaSpace 如果d的值大于0则无效,否则会用来计算d的值
borderType 边框模式用于推断图像外部的像素

示例

以均值滤波、高斯滤波、中值滤波、双边滤波采用5*5左右核对同一张图片进行模糊。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/opencv.hpp>
#include <QtDebug>

using namespace cv;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Mat dstBlur;
    Mat dstGaussianBlur;
    Mat dstmedianBlur;
    Mat dstbilateralFilter;
    Mat src = imread("E:/OpenCV/OpenCVPicture/horse.png");
    if(src.empty()){
        qDebug()<<"can not load image...\n";
        return ;
    }
    namedWindow("srcImage",CV_WINDOW_AUTOSIZE);
    namedWindow("均值滤波",CV_WINDOW_AUTOSIZE);
    namedWindow("高斯滤波",CV_WINDOW_AUTOSIZE);
    namedWindow("中值滤波",CV_WINDOW_AUTOSIZE);
    namedWindow("双边滤波",CV_WINDOW_AUTOSIZE);
    //均值滤波
    blur(src,dstBlur,Size(5,5));
    //高斯滤波
    GaussianBlur(src,dstGaussianBlur,Size(5,5),11,11);
    //中值滤波
    medianBlur(src,dstmedianBlur,5);
    //双边滤波
    bilateralFilter(src,dstbilateralFilter,5,100,3);
    
    imshow("srcImage",src);
    imshow("均值滤波",dstBlur);
    imshow("高斯滤波",dstGaussianBlur);
    imshow("中值滤波",dstmedianBlur);
    imshow("双边滤波",dstbilateralFilter);
    waitKey(0);

原图:
在这里插入图片描述
均值滤波:
在这里插入图片描述
高斯滤波:
在这里插入图片描述
中值滤波:
在这里插入图片描述
双边滤波:
在这里插入图片描述

2017-04-11 13:50:01 dingkeyanlail 阅读数 3161
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5395 人正在学习 去看看 贾志刚

最近做了一个基于Opencv3和Qt5的图像处理GUI,具有图像预处理、形态学操作、图像滤波、图像分割等四大功能模块.

图像预处理主要包括以下五个部分:
  "①灰度化."
  "②二值化."
  "③对比度和亮度."
  "④直方图均衡化."
  "⑤设置感兴趣区域."

形态学处理主要包括以下七个部分:
  "①膨胀、腐蚀."
  "②开、闭运算."
  "③梯度、顶帽、黑帽运算."
  "④填充孔洞."
  "⑤去除小面积区域."
  "⑥形态学重构."
  "⑦轮廓的提取及描述."

图像滤波处理主要包括以下五种滤波:
  "①方框滤波."
  "②均值滤波."
  "③高斯滤波."
  "④中值滤波."
  "⑤双边滤波."

图像分割主要包括以下五种类型的分割:
  "①基于阈值的大津法分割"
  "②基于形态学的分水岭算法分割"
  "③基于边缘检测的Canny、Sobel、Laplacian算子分割"
  "④基于区域的生长法分割"
  "⑤基于图论的Grabcut分割"
  "⑥基于活动轮廓模型的Leverset分割"

已经打包成EXE文件,欢迎下载试用。(注:有一些Bug没有解决)

链接地址:http://download.csdn.net/detail/dingkeyanlail/9810589




没有更多推荐了,返回首页