当前位置: 首页 > wzjs >正文

模块化网站建设360搜索首页

模块化网站建设,360搜索首页,班级网站设计,刚做的网站为什么百度搜不到掩码(Mask)是图像处理中常用的技术&#xff0c;它允许我们只对图像的特定部分进行操作。在OpenCV C中&#xff0c;掩码通常是一个与原始图像尺寸相同的二值图像(0和255)&#xff0c;用于指定哪些像素需要处理。基本掩码操作1. 创建掩码#include <opencv2/opencv.hpp>int …

掩码(Mask)是图像处理中常用的技术,它允许我们只对图像的特定部分进行操作。在OpenCV C++中,掩码通常是一个与原始图像尺寸相同的二值图像(0和255),用于指定哪些像素需要处理。

基本掩码操作

1. 创建掩码

#include <opencv2/opencv.hpp>int main() {// 创建一个黑色图像(全0)cv::Mat mask = cv::Mat::zeros(cv::Size(500, 500), CV_8UC1);// 在掩码上画一个白色矩形(255)cv::rectangle(mask, cv::Rect(100, 100, 200, 200), cv::Scalar(255), cv::FILLED);cv::imshow("Mask", mask);cv::waitKey(0);return 0;
}

2. 使用掩码复制图像区域

cv::Mat src = cv::imread("image.jpg");
cv::Mat dst = cv::Mat::zeros(src.size(), src.type());// 只复制mask中非零像素对应的src区域到dst
src.copyTo(dst, mask);
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {// 1. 读取源图像Mat src = imread("image.jpg");if (src.empty()) {cout << "无法加载图像!" << endl;return -1;}// 2. 创建目标图像(初始化为黑色)Mat dst = Mat::zeros(src.size(), src.type());// 3. 创建掩码(与源图像同尺寸的单通道图像)Mat mask = Mat::zeros(src.size(), CV_8UC1);// 4. 在掩码上绘制白色区域(255表示要复制的区域)// 示例1: 绘制一个圆形区域circle(mask, Point(src.cols/2, src.rows/2), 150, Scalar(255), -1);// 示例2: 或者绘制矩形区域// rectangle(mask, Rect(100, 100, 300, 200), Scalar(255), -1);// 5. 使用掩码复制图像区域src.copyTo(dst, mask);// 6. 显示结果imshow("原始图像", src);imshow("掩码", mask);imshow("结果图像", dst);waitKey(0);return 0;
}

3. 位运算与掩码

// 与操作
cv::bitwise_and(src1, src2, dst, mask);// 或操作
cv::bitwise_or(src1, src2, dst, mask);// 非操作
cv::bitwise_not(src, dst, mask);// 异或操作
cv::bitwise_xor(src1, src2, dst, mask);

4.复制圆形区域

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {// 1. 读取源图像Mat src = imread("image.jpg");if (src.empty()) {cout << "无法加载图像!" << endl;return -1;}// 2. 创建目标图像(初始化为黑色)Mat dst = Mat::zeros(src.size(), src.type());// 3. 创建掩码(单通道,与源图像同尺寸)Mat mask = Mat::zeros(src.rows, src.cols, CV_8UC1);// 4. 在掩码上绘制圆形区域(255表示要复制的区域)circle(mask, Point(src.cols/2, src.rows/2), 150, Scalar(255), -1);// 5. 使用掩码复制图像区域src.copyTo(dst, mask);// 6. 显示结果imshow("原始图像", src);imshow("掩码图像", mask);imshow("结果图像", dst);waitKey(0);return 0;
}

常见应用场景

1. ROI(感兴趣区域)处理

cv::Mat image = cv::imread("image.jpg");
cv::Mat roiMask = cv::Mat::zeros(image.size(), CV_8UC1);// 设置ROI区域
cv::Rect roi(50, 50, 200, 200);
roiMask(roi).setTo(255);// 只处理ROI区域
cv::Mat blurred;
cv::GaussianBlur(image, blurred, cv::Size(5, 5), 0);
blurred.copyTo(image, roiMask);

2. 图像合成

cv::Mat foreground = cv::imread("foreground.png", cv::IMREAD_UNCHANGED);
cv::Mat background = cv::imread("background.jpg");// 从带alpha通道的图像创建掩码
cv::Mat fgMask;
cv::extractChannel(foreground, fgMask, 3); // 提取alpha通道// 合成图像
cv::Mat fgBGR;
cv::cvtColor(foreground, fgBGR, cv::COLOR_BGRA2BGR);
fgBGR.copyTo(background(cv::Rect(100, 100, fgBGR.cols, fgBGR.rows)), fgMask);

3. 基于颜色的掩码

cv::Mat image = cv::imread("image.jpg");
cv::Mat hsv;
cv::cvtColor(image, hsv, cv::COLOR_BGR2HSV);// 创建颜色掩码(例如提取红色区域)
cv::Mat redMask;
cv::inRange(hsv, cv::Scalar(0, 70, 50), cv::Scalar(10, 255, 255), redMask);// 应用掩码
cv::Mat redOnly;
image.copyTo(redOnly, redMask);

4.提取特定颜色区域

#include <opencv2/opencv.hpp>int main() {Mat src = imread("fruits.jpg");Mat hsv, mask, result;// 转换为HSV颜色空间cvtColor(src, hsv, COLOR_BGR2HSV);// 创建颜色掩码(提取红色区域)inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask);// 应用掩码src.copyTo(result, mask);imshow("Original", src);imshow("Mask", mask);imshow("Red Objects", result);waitKey(0);return 0;
}

高级技巧

1. 掩码的膨胀与腐蚀

cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));// 膨胀掩码
cv::dilate(mask, mask, kernel);// 腐蚀掩码
cv::erode(mask, mask, kernel);

2. 掩码边缘模糊

cv::Mat blurredMask;
cv::GaussianBlur(mask, blurredMask, cv::Size(5, 5), 0);// 归一化到0-1范围用于混合
blurredMask.convertTo(blurredMask, CV_32F, 1.0/255);

3.掩码边缘羽化

// 创建模糊边缘的掩码
Mat blurredMask;
GaussianBlur(mask, blurredMask, Size(21,21), 0);// 转换为浮点型用于混合
blurredMask.convertTo(blurredMask, CV_32F, 1.0/255);// 使用混合函数实现羽化效果
Mat result;
src.convertTo(src, CV_32F);
dst.convertTo(dst, CV_32F);
multiply(src, blurredMask, src);
multiply(dst, Scalar::all(1.0)-blurredMask, dst);
add(src, dst, result);
result.convertTo(result, CV_8U);

4. 多掩码组合

// 创建两个不同的掩码
Mat mask1 = Mat::zeros(src.size(), CV_8UC1);
Mat mask2 = Mat::zeros(src.size(), CV_8UC1);
circle(mask1, Point(200,200), 100, Scalar(255), -1);
rectangle(mask2, Rect(150,150,200,200), Scalar(255), -1);// 掩码组合操作
Mat combinedMask;
bitwise_or(mask1, mask2, combinedMask); // 逻辑或
// bitwise_and(mask1, mask2, combinedMask); // 逻辑与
// bitwise_xor(mask1, mask2, combinedMask); // 逻辑异或src.copyTo(dst, combinedMask);

http://www.dtcms.com/wzjs/454397.html

相关文章:

  • 网站做管制户外刀具万网建站
  • 重庆电商网站建设网页优化建议
  • vue做的pc线上网站百度联系方式人工客服
  • 网站报错解析天津搜狗seo推广
  • 美团网站做疏通广告怎样做搜索引擎推广
  • 前端用什么框架做网站商城网站开发公司
  • ps如何做网站导航图建立网站需要什么
  • wordpress菜单图标特效上海网站seo外包
  • 千库网网站百度关键词优化多少钱一年
  • 深圳专业专业网站设计中国搜索引擎排行榜
  • php网站开发环境的设置手机端关键词排名免费软件
  • 编程正规学校有哪几所黑帽seo是什么意思
  • asp.net 政府网站企业网站免费制作
  • 微网站模板代码网络营销战略的内容
  • 网站建设的心得免费刷赞网站推广免费
  • 400全国服务热线顺德手机网站建设公众号推广渠道
  • 网站的静态资源服务器怎么做2023年最新时政热点
  • 怎么注册app软件优化网站排名需要多少钱
  • 用cms建网站容易吗最近的电脑培训学校
  • 做h5小程序的网站青岛网站推广关键词
  • 上海做网站吧简述网站建设的基本流程
  • 淘宝网站做淘宝客建设网站的基本流程
  • 织梦网站如何更新系统百度快照在哪里找
  • 深圳龙华汽车网站建设域名排名查询
  • 建设班级网站手机google官网注册账号入口
  • 哪家网站开发网上怎么发布广告
  • 有公网ip 建网站网络营销推广的方式有哪些
  • 知名seo网站优化网站关键词如何快速上首页
  • 织梦网站如何做软件下载南京seo培训
  • 如何做网站推广页面网络营销具有什么特点