opencv矩阵常用操作(一)

applyColorMap/*颜色重映射*/
cvtColor/*色系转换*/
equalizeHist/*直方图均衡化*/
normalize/*归一化矩阵*/


例子:


void add_image(MainWindow *view) try {

    constexpr auto rows=1024;
    constexpr auto cols=1024;
    constexpr auto posx_max=cols-1;
    constexpr auto posy_max=rows-1;
    constexpr double step_x=cols/(2.-(-2.));
    constexpr double step_y=rows/(2.-(-2.));

    /*点出现概率的统计矩阵*/
    cv::Mat hist=cv::Mat::zeros(rows,cols,CV_64FC1);

    /* 设置初始化值 */
    constexpr auto a=-12.7;
    constexpr auto b=-1.09;
    constexpr auto c=-.816;
    constexpr auto d=-2.12;
    auto x=20.1111242432;
    auto y=564.447152;

    /*迭代生成图片*/
    for (int k=0; k<10; ++k)
        for (int i=0; i<(1024*1024); ++i) {

            auto xn=std::sin(a*y)-std::cos(b*x);
            auto yn=std::sin(c*x)-std::cos(d*y);

            auto posx=static_cast<int>(std::max(0.0,(xn+2)*step_x));
            auto posy=static_cast<int>(std::max(0.0,(yn+2)*step_y));

            posx=std::min(posx,posx_max);
            posy=std::min(posy,posy_max);

            auto currentHist=hist.at<double>(posy,posx);
            ++currentHist;

            x=xn;
            y=yn;

        }

    /*分配灰度图内存*/
    QImage ansGray(cols,rows,QImage::Format_Grayscale8);
    /*对灰度图内存的引用*/
    cv::Mat matGray(ansGray.height(),ansGray.width(),
        CV_8UC1,ansGray.bits(),ansGray.bytesPerLine());
    /*将统计图归一化到[0,255],生成灰度图*/
    cv::normalize(
        hist,matGray,
        255.0,0.0,
        cv::NORM_MINMAX,
        CV_8UC1);
    /*直方图均衡化*/
    cv::equalizeHist(matGray,matGray);

    /*将灰度图加入图片到绘制体系*/
    view->addImage(ansGray);

    /*分配彩色图内存*/
    QImage ansRGB(cols,rows,QImage::Format_RGB888);
    ansRGB.fill(QColor(0,0,0,255));

    /*引用彩色图片内存*/
    cv::Mat matRGB(ansRGB.height(),ansRGB.width(),
        CV_8UC3,ansRGB.bits(),ansRGB.bytesPerLine());

    /*灰度图重映射*/
    cv::applyColorMap(matGray,matRGB,cv::COLORMAP_COOL);

    /*将opencv brg色系转为rgb色系(opencv架构级错误,默认用bgr而不是rgb)*/
    cv::cvtColor(matRGB,matRGB,cv::COLOR_BGR2RGB);

    /*将灰度图加入图片到绘制体系*/
    view->addImage(ansRGB);
}
catch (...) {
    CPLUSPLUS_EXCEPTION(false);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值