opencv学习笔记(四)阈值和金字塔

1.图像阈值threshold

ladaptiveThreshold(

Mat src, // 输入的灰度图像

Mat dst, // 二值图像

double maxValue, // 二值图像最大值

int adaptiveMethod // 自适应方法,只能其中之一 –

// ADAPTIVE_THRESH_MEAN_C , ADAPTIVE_THRESH_GAUSSIAN_C

int thresholdType,// 阈值类型

int blockSize, // 块大小

double C // 常量C 可以是正数,0,负数

)

阈值类型详解:https://blog.csdn.net/weixin_42296411/article/details/80901080

案例:

adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);

treshold函数

/*图像金字塔*/
#include"pch.h"
#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

Mat src, dst, gray_src;

int threshold_value = 127;
int threshold_max = 255;
int type_value = 2;
int type_max = 4;
string output_title = "output";

void threshold_demo(int, void*);
int main(int argc, char** argv) {
	src = imread("test.png");
	if (!src.data) {
		printf("没找到图像");
		return-1;
	}

	namedWindow(output_title, CV_WINDOW_AUTOSIZE);
	createTrackbar("Threshold Value:", output_title, &threshold_value, threshold_max, threshold_demo);
	createTrackbar("Type Value:", output_title, &type_value, type_max, threshold_demo);
	threshold_demo(0, 0);

	cvtColor(src, gray_src, CV_RGB2GRAY);
	namedWindow("gray_src", CV_WINDOW_AUTOSIZE);
	imshow("gray_src", gray_src);


	waitKey(0);
	return 0;
}
void threshold_demo(int, void*) {

	cvtColor(src, gray_src, CV_RGB2GRAY);
	threshold(gray_src, dst,threshold_value,255,type_value);
	imshow(output_title, dst);

}

图像阈值比较常用于简单的图像分割,其中六种类型中ostu(最小类间方差)和triangle算法是自动寻找阈值的算法。

结果:在这里插入图片描述

2.图像金字塔

图像金字塔里面包含比较复杂的信号插值和采样知识以及小波变换知识,想要了解透彻需要秃头,先欠着,学个API先吧。

金字塔英文 :pyramid

高斯金字塔 – 用来对图像进行降采样

拉普拉斯金字塔 – 用来重建一张图片根据它的上层降采样图片

高斯金子塔是从底向上,逐层降采样得到。

降采样之后图像大小是原图像MxN的M/2 x N/2 ,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。

高斯金子塔的生成过程分为两步:

- 对当前层进行高斯模糊

- 删除当前层的偶数行与列

即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。

Difference of Gaussian-DOGl定义:就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像,称为高斯不同(DOG),高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。

上采样(cv::pyrUp) – zoom in 放大 pyrUp(Mat src, Mat dst, Size(src.cols2, src.rows2))

降采样 (cv::pyrDown) – zoom out 缩小 pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2))

代码:

/*图像金字塔*/
#include"pch.h"
#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;


int main(int argc, char** argv) {
	Mat src,dst, up_dst, down_dst, dst1, dst2,gray_src;
	src = imread("test.png");
	if (!src.data) {
		printf("没找到图像");
		return-1;
	}

	pyrDown(src, down_dst, Size(src.cols / 2, src.rows / 2));//Size默认先列后行
	pyrUp(src, up_dst, Size(src.cols * 2, src.rows *2));

	namedWindow("input", CV_WINDOW_AUTOSIZE);
	imshow("input", src);
	namedWindow("zoom out", CV_WINDOW_AUTOSIZE);
	imshow("zoom out", up_dst);
	namedWindow("zoom in", CV_WINDOW_AUTOSIZE);
	imshow("zoom in", down_dst);

/*DOG*/
	cvtColor(src, gray_src, CV_RGB2GRAY);
	GaussianBlur(gray_src, dst1, Size(3, 3), 0, 0);
	GaussianBlur(gray_src, dst2, Size(7, 7), 0, 0);
	subtract(dst1, dst2, dst, Mat());

	normalize(dst, dst, 0, 255, NORM_MINMAX);//放大差值便于观察

	namedWindow("dog", CV_WINDOW_AUTOSIZE);
	imshow("dog", dst);


	waitKey(0);
	return 0;
}

结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值