图像金字塔、边缘检测、图像加权显示、直方图均衡化

//图像金字塔
	//上采样
	pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));
	pyrDown(src, dst, Size(src.cols / 2, src.rows / 2));
	//高斯不同
	Mat g1, g2, gr, dogImg;
	cvtColor(src, gr, CV_BGR2GRAY);

	GaussianBlur(gr, g1, Size(5, 5), 0, 0);
	GaussianBlur(g1, g2, Size(5, 5), 0, 0);
	subtract(g1, g2, dogImg, Mat());
	//sobel边缘检测
	Mat gray_src;
	GaussianBlur(src, dst, Size(3, 3), 0, 0);
	cvtColor(dst, gray_src, CV_BGR2GRAY);
	Mat xgrad, ygrad;
	Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);
	Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);
	convertScaleAbs(xgrad, xgrad);//取绝对值
	convertScaleAbs(ygrad, ygrad);
	Mat xygray;
	//x,y分配权重
	addWeighted(xgrad, 0.5, ygrad, 0.5,0, xygray,-1);
	//分配权重,替换addweighted
	xygray = Mat(xgrad.size(), xgrad.type());
	int heigh = ygrad.rows;
	int weigh = xgrad.cols;
	for (int row = 0; row < heigh; row++)
	{
		for (int col = 0; col < weigh; col++)
		{
			int x = xgrad.at<char>(row, col);
			int y = ygrad.at<char>(row, col);
			int n = x + y;
			xygray.at<char>(row, col) = saturate_cast<char>(n);
		}
	}
	//another method 求边缘
	Scharr(gray_src, xgrad, CV_16S, 1, 0);
	Scharr(gray_src, ygrad, CV_16S, 0, 1);
    //laplance边缘
	Mat lap_img;
	GaussianBlur(src, dst, Size(3, 3), 0, 0);
	cvtColor(dst, gray_src, CV_BGR2GRAY);
	Laplacian(gray_src, lap_img, CV_16S, 3);
	convertScaleAbs(lap_img, lap_img);
	threshold(lap_img, lap_img, 0, 255, THRESH_OTSU | THRESH_BINARY);
	//canny 边缘
	//高斯模糊、灰度、梯度(sobel,scharr)、非最大值抑制、阈值
	Canny(gray_src, dst, 20, 40, 3, false);
	//直方图均衡化,提高图像对比度
	equalizeHist(src, dst);//src需为八位单通道图像
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值