OpenCV——颜色运算(二)

本文详细介绍了图像处理技术的应用实例,包括图像颜色转换、亮度调整和图像增强等核心功能,通过实操代码展示了如何使用C++和OpenCV进行图像处理,并提供了完整的图像输入输出流程,帮助开发者掌握图像处理的基础技能。


#ifndef PS_ALGORITHM_H_INCLUDED
#define PS_ALGORITHM_H_INCLUDED

#include <iostream>
#include <string>
#include "cv.h"
#include "highgui.h"
#include "cxmat.hpp"
#include "cxcore.hpp"

using namespace std;
using namespace cv;


void Show_Image(Mat&, const string &);


#endif // PS_ALGORITHM_H_INCLUDED


#include "PS_Algorithm.h"
#include <time.h>

using namespace std;
using namespace cv;

int main(void)
{
    string Img_name("4.jpg");
    Mat Image_in;
    Image_in=imread(Img_name);
    Show_Image(Image_in, Img_name);
    Mat Image_out(Image_in.size(), CV_32FC3);
    Image_in.convertTo(Image_out, CV_32FC3);

    Mat Image_2(Image_in.size(), CV_32FC3);
    Image_in.convertTo( Image_2, CV_32FC3);

    Mat r(Image_in.rows, Image_in.cols, CV_32FC1);
    Mat g(Image_in.rows, Image_in.cols, CV_32FC1);
    Mat b(Image_in.rows, Image_in.cols, CV_32FC1);

    Mat inp[]={b, g, r};

    split(Image_2, inp);

    Mat r_new(Image_in.rows, Image_in.cols, CV_32FC1);
    Mat g_new(Image_in.rows, Image_in.cols, CV_32FC1);
    Mat b_new(Image_in.rows, Image_in.cols, CV_32FC1);

    cv::pow(g-b, 2, r_new);
    cv::pow(r-b, 2, g_new);
    cv::pow(r-g, 2, b_new);

    r_new=r_new/128;
    g_new=g_new/128;
    b_new=b_new/128;

    Mat out[]={b_new, g_new, r_new};

    merge(out,3,Image_out);

    Image_out=Image_out/255;

    Show_Image(Image_out, "out.jpg");

    waitKey();
    cout<<"All is well."<<endl;

}


#include "PS_Algorithm.h"
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

void Show_Image(Mat& Image, const string& str)
{
    namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
    imshow(str.c_str(), Image);

}



原图:


效果图:


转载于:https://www.cnblogs.com/mtcnn/p/9412667.html

### OpenCV 中的图像掩码操作 #### 创建掩码 为了执行有效的图像掩码操作,创建合适的掩码至关重要。通常情况下,掩码是一个灰度图(即单通道),其中白色区域代表要保留的部分,黑色部分则被忽略。 ```python import numpy as np import cv2 # 假设有一个彩色图片 img 和一个形状相同的全黑背景上的圆形白区作为 mask img = cv2.imread('image.jpg') mask = np.zeros(img.shape[:2], dtype=np.uint8) # 绘制圆圈在 mask 上 (中心坐标, 半径, 颜色(255), 线条粗细(-1 表示填充)) cv2.circle(mask, (center_x, center_y), radius, 255, -1) ``` #### 应用掩码于图像上 当有了适当构建好的掩码之后,可以利用 `bitwise_and` 函数来应用这个掩码到原始图像上去。这会使得只有那些对应位置为白色的像素得以保存下来;而其他地方将会变成完全透明或黑色取决于具体应用场景[^1]。 ```python masked_img = cv2.bitwise_and(img, img, mask=mask) ``` 对于某些特定需求来说,可能还需要计算带有掩码条件下的统计特征比如平均亮度等: ```python mean_val_inside_mask = cv2.mean(img, mask)[0] print(f"The mean intensity inside the masked area is {mean_val_inside_mask}") ``` 这里使用了 `cv2.mean()` 方法并传入了一个额外参数 `mask` 来指定只对感兴趣区域内做均值运算[^2]。 另外,在处理不同类型的逻辑运算时也可以通过类似的接口实现,例如取反操作可以通过如下方式完成: ```python inverted_masked_img = cv2.bitwise_not(masked_img) ``` 值得注意的是,如果尝试在一个多通道图像与另一个具有相同尺寸但是仅含单一颜色平面的数据结构之间直接相乘,则可能会遇到错误提示因为它们并不兼容。因此务必确保参与运算的对象都处于同一维度下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值