《opencv实用探索·十五》inRange二值化图像

news/2024/7/21 4:56:25 标签: opencv, 人工智能, 计算机视觉, 图像处理, c++

opencv接口如下:

void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);

函数实现二值化功能,主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)

参数1:输入要处理的图像,可以为单通道或多通道。
参数2:包含下边界的数组或标量。
参数3:包含上边界数组或标量。
参数4:输出图像,与输入图像src 尺寸相同且为CV_8U 类型。
请注意:该函数输出的dst是一幅二值化之后的图像。

单通道灰度图demo:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat grayImage = cv::imread("gray_image.jpg", cv::IMREAD_GRAYSCALE);

    if (grayImage.empty()) {
        std::cerr << "Error: Could not read the image." << std::endl;
        return -1;
    }

    // 定义灰度范围(上限和下限都设置为相同的值,表示提取该灰度值)
    int lowerBound = 100;
    int upperBound = 200;

    // 创建输出图像
    cv::Mat binaryImage;

    // 应用灰度范围阈值
    cv::inRange(grayImage, lowerBound, upperBound, binaryImage);

    // 显示原图和二值图像
    cv::imshow("Original Image", grayImage);
    cv::imshow("Binary Image", binaryImage);

    cv::waitKey(0);
    return 0;
}

三通道图像demo:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat colorImage = cv::imread("color_image.jpg");

    if (colorImage.empty()) {
        std::cerr << "Error: Could not read the image." << std::endl;
        return -1;
    }

    // 定义颜色范围
    cv::Scalar lowerBound(100, 0, 0);  // BGR格式,最小值
    cv::Scalar upperBound(255, 50, 50);  // BGR格式,最大值

    // 创建输出图像
    cv::Mat binaryImage;

    // 应用颜色范围阈值
    cv::inRange(colorImage, lowerBound, upperBound, binaryImage);

    // 显示原图和二值图像
    cv::imshow("Original Image", colorImage);
    cv::imshow("Binary Image", binaryImage);

    cv::waitKey(0);
    return 0;
}

上面代码中注意点:
(1)opencv中三通道图像按BGR排列,不是RGB
(2)上面案例中B通道(100-255)范围设置1,G通道(0-50)范围设置1,R通道(0-50)范围设置1

在这里插入图片描述

http://www.niftyadmin.cn/n/5254807.html

相关文章

numpy数据读取保存及速度测试

目录 数据保存及读取 速度比对测试 数据保存及读取 代码示例&#xff1a; # 导入必要的库 import numpy as np # 生成测试数据 arr_disk np.arange(8) # 打印生成能的数据 print(arr_disk) # numpy保存数据到本地 np.save("arr_disk", arr_disk) # 加载本地数据…

金蝶 Apusic 应用服务器任意文件上传漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 1. 产品介绍 金蝶 Apusic 是金蝶集团旗下的一款企业级应用服务器&#…

linux中文件服务器NFS和FTP服务

文件服务器 NFSNFS介绍配置nfs文件共享服务端客户端 FTPftp介绍FTP基础ftp主动模式ftp被动模式 Vsftp 服务器简介vsftpd配置安装vsftpd[ftp的服务端]编辑配置文件匿名用户设置创建本地用户使用ftp服务 客户端操作匿名用户登录本地用户登录lftp服务 NFS NFS介绍 文件系统级别共…

云原生Kubernetes系列 | Docker/Kubernetes的卷管理

云原生Kubernetes系列 | Docker/Kubernetes的卷管理 1. Docker卷管理2. Kubernetes卷管理2.1. 本地存储2.1.1. emptyDir2.1.2. hostPath2.2. 网络存储2.2.1. 使用NFS2.2.2. 使用ISCSI2.3. 持久化存储2.3.1. PV和PVC2.3.2. 访问模式2.3.3. 回收策略1. Docker卷管理

leetcode 股票DP系列 总结篇

121. 买卖股票的最佳时机 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。 只能进行一次交易 很简单&#xff0c;只需边遍历边记录最小值即可。 class Solution { public:int maxProfit(vector<int>& prices) {int res …

Hadoop 完全分布式搭建 详细流程

Hadoop的完全分布式搭建是一项复杂的任务&#xff0c;其中包含了很多步骤和细节。以下是一个简要的流程&#xff0c;供参考&#xff1a; 确定Hadoop版本和操作系统 首先&#xff0c;您需要确定要安装的Hadoop版本和所使用的操作系统。Hadoop有多个版本&#xff0c;每个版本可…

Linux 常见面试题 Day8

目录 1、如何将分区挂载&#xff1f; 2、如何杀掉linux系统中所有的带“nginx”字段的进程&#xff0c;请给出详细命令&#xff1f; 3、分区的本质&#xff1f;如何查看系统分区&#xff1f; 4、你对swap的看法&#xff1f; 5、如何快速定位Cpu 飙高 的原因&#xff1f; 6…

HarmonyOS编译开源native库(OpenSSL实例)

前言 近期项目要开始做鸿蒙版本&#xff0c;有一部分依赖native的代码也需要迁移&#xff0c;某个native模块依赖openssl&#xff0c;需要在鸿蒙下重新编译openssl才行。一开始找了很多相关文档都没有得到方法&#xff0c;无奈只能自己凭经验慢慢试&#xff0c;最后还是成功了…