hybridimage实验(c++ opencv)

结果展示

高频


在这里插入图片描述

低频

人物
在这里插入图片描述

结果

在这里插入图片描述

过程

1、读入图片
    img_cat = imread("/home/joshua/Projects/C++/CV/test/cat.jpg");
    img_human = imread("/home/joshua/Projects/C++/CV/test/human.jpg");
2、resize
    resize(img_human, img_human, Size(img_cat.cols, img_cat.rows));
3、gaussion 滤波
    GaussianBlur(img_cat, img_cat_gaus, Size(kernel1, kernel1), sigmaX, sigmaY);
    GaussianBlur(img_human, img_human_gaus, Size(kernel2, kernel2), sigmaX, sigmaY);
4、分解高频和低频

cat做高频

human做低频

    res1 = img_cat - img_cat_gaus;
    imshow("高频", res1);
    imshow("低频", img_human_gaus);
5、hybridimg
    alpha = (double) alpha_slider / alpha_slider_max;
    beta = (1.0 - alpha);
    addWeighted(res1, alpha, img_human_gaus, beta, 0.0, res);

结果分析

低频中kernel越大图片越模糊

高频中kernel越大图片细节越多

代码

#include <iostream>
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"

using namespace cv;
using namespace std;

const int kernel_size_max = 30;
const int alpha_slider_max = 100;
const int sigma_slider_max = 100;
int alpha_slider, sigmaX_slider, sigmaY_slider;
int kernel1, kernel2;
double alpha;
double beta;
double sigmaX = 0, sigmaY = 0;
Mat img_cat, img_human, img_cat_gaus, img_human_gaus;
Mat res1, res;

static void on_trackbar(int, void *) {
    if (kernel1 % 2 == 0) kernel1++;
    if (kernel2 % 2 == 0) kernel2++;
    sigmaX = (double) sigmaX_slider / sigma_slider_max;
    sigmaY = (double) sigmaY_slider / sigma_slider_max;
    GaussianBlur(img_cat, img_cat_gaus, Size(kernel1, kernel1), sigmaX, sigmaY);
    GaussianBlur(img_human, img_human_gaus, Size(kernel2, kernel2), sigmaX, sigmaY);
    res1 = img_cat - img_cat_gaus;
    imshow("高频", res1);
    imshow("低频", img_human_gaus);

    alpha = (double) alpha_slider / alpha_slider_max;
    beta = (1.0 - alpha);
    addWeighted(res1, alpha, img_human_gaus, beta, 0.0, res);
    imshow("res", res);
}

int main() {
    img_cat = imread("/home/joshua/Projects/C++/CV/test/cat.jpg");
    img_human = imread("/home/joshua/Projects/C++/CV/test/human.jpg");
    resize(img_human, img_human, Size(img_cat.cols, img_cat.rows));

    alpha_slider = 0;
    kernel1 = 1;
    kernel2 = 1;

    namedWindow("res", WINDOW_AUTOSIZE); // Create Window
    char alphaTrackbar[50], kernel1SizeTrackbar[50], kernel2SizeTrackbar[50], sigmaXTrackbar[50], sigmaYTrackbar[50];
    sprintf(alphaTrackbar, "Alpha: %d %", alpha_slider_max);
    sprintf(kernel1SizeTrackbar, "kernel1 size: %d", kernel_size_max);
    sprintf(kernel2SizeTrackbar, "kernel2 size: %d", kernel_size_max);
    sprintf(sigmaXTrackbar, "sigmaX: %d ", sigma_slider_max);
    sprintf(sigmaYTrackbar, "sigmaY: %d", sigma_slider_max);
    createTrackbar(alphaTrackbar, "res", &alpha_slider, alpha_slider_max, on_trackbar);
    createTrackbar(kernel1SizeTrackbar, "res", &kernel1, kernel_size_max, on_trackbar);
    createTrackbar(kernel2SizeTrackbar, "res", &kernel2, kernel_size_max, on_trackbar);
    createTrackbar(sigmaXTrackbar, "res", &sigmaX_slider, sigma_slider_max, on_trackbar);
    createTrackbar(sigmaYTrackbar, "res", &sigmaY_slider,sigma_slider_max, on_trackbar);

    on_trackbar(alpha_slider, 0);
    on_trackbar(kernel1, 0);
    on_trackbar(kernel2, 0);
    on_trackbar(sigmaX_slider, 0);
    on_trackbar(sigmaY_slider, 0);

    waitKey(0);
    return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joshua_yi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值