【OpenCV学习记录】7.矩阵的掩膜操作

矩阵的淹没操作即,根据掩膜重新计算图像每个像素的像素值,使图像模糊或锐化。

例:通过掩膜操作使图像对比度提高。
假设当前像素点位置(i,j),当前像素点像素值为I(i,j)。
则I ( i , j ) = 5 * I ( i , j ) - [ I ( i - 1 , j ) + I ( i + 1 , j ) + I ( i , j - 1 ) + I ( i , j + 1 ) ]
即使用如下矩阵( 1 )与以当前像素点为(1,1)的3*3矩阵的计算结果。
(1) [ 0 − 1 0 − 1 5 − 1 0 − 1 0 ] \begin{bmatrix} 0 & -1 & 0\\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix} \tag{1} 010151010(1)
功能实现一

	Mat src, dst;
	//显示原图
	src = imread("ysjx.jpg");
	if (src.empty()) {
		cout << "no image!" << endl;
		return -1;
	}
	namedWindow("opencv", CV_WINDOW_AUTOSIZE);
	imshow("opencv", src);
	//获取原图信息
	int cols = src.cols*src.channels();
	int offsetx = src.channels();
	int rows = src.rows;
	//计算图像新的像素值,显示提高对比度后的图像
	dst = Mat::zeros(src.size(), src.type());
	for (int row = 1; row < (rows - 1); row++) {
		const uchar* previous = src.ptr<uchar>(row - 1);
		const uchar* current = src.ptr<uchar>(row);
		const uchar* next = src.ptr<uchar>(row + 1);
		uchar* output = dst.ptr<uchar>(row);
		for (int col = offsetx; col < cols; col++) {
			output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col]));
		}
	}
	namedWindow("contract image demo1", CV_WINDOW_AUTOSIZE);
	imshow("contract image demo1", dst);

运行结果
在这里插入图片描述功能实现二

	//显示原图
	Mat src, dst;
	src = imread("ysjx.jpg");
	if (src.empty()) {
		cout << "no image!" << endl;
		int a;
		cin >> a;
		return -1;
	}
	namedWindow("opencv", CV_WINDOW_AUTOSIZE);
	imshow("opencv", src);
	//计算图像新的像素值,显示提高对比度后的图像
	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(src, dst, src.depth(), kernel);//src.depth()表示位图深度
	namedWindow("contract image demo2", CV_WINDOW_AUTOSIZE);
	imshow("contract image demo2", dst);	

运行结果
在这里插入图片描述

常用矩阵模板:http://blog.sina.com.cn/s/blog_6ac784290101e47s.html

参考:https://www.bilibili.com/video/av29600072?from=search&seid=10536318364153117214

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中的掩膜操作是一种图像处理技术,用于将图像的某些区域设置为特定的值或通过其他方式对其进行操作掩膜通常是一个与原始图像具有相同大小的二进制图像或具有相同通道数的矩阵。 要进行掩膜操作,可以使用以下步骤: 1. 创建一个与原始图像大小相同的掩膜图像,其中包含要操作的区域。可以使用OpenCV提供的函数(例如cv2.threshold())或手动创建二进制图像。 2. 将掩膜应用于原始图像。可以使用OpenCV中的位运算函数(例如cv2.bitwise_and())将掩膜与原始图像进行逐位与操作,以保留掩膜中的像素。 以下是一个简单的示例代码,演示如何进行掩膜操作: ```python import cv2 import numpy as np # 读取原始图像 image = cv2.imread('image.jpg') # 创建掩膜图像 mask = np.zeros(image.shape[:2], dtype=np.uint8) cv2.circle(mask, (image.shape[1]//2, image.shape[0]//2), 100, (255), -1) # 应用掩膜 masked_image = cv2.bitwise_and(image, image, mask=mask) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Masked Image', masked_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的代码中,我们首先加载原始图像,然后创建一个与原始图像相同大小的掩膜图像。在这个例子中,我们使用`cv2.circle()`函数创建了一个圆形掩膜。 然后,我们使用`cv2.bitwise_and()`函数将掩膜应用于原始图像。最后,我们显示原始图像和应用掩膜后的图像。 请注意,掩膜可以用于各种不同的图像处理任务,例如图像分割、背景提取和特定区域的操作等。上述示例只是其中的一种用法,具体取决于您的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值