You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

面向对象编程:如何合并相似行列处理函数以精简代码

合并行列均值计算的复用函数

你可以通过提取重复逻辑,编写一个通用函数来处理行和列的均值计算,以下是两种简洁实现方式:

方式一:布尔参数区分行列

#include <vector>
#include <opencv2/opencv.hpp>

vector<float> computeAxisSpectrum(const cv::Mat& img, bool isRow) {
    vector<float> spectrum;
    const int count = isRow ? img.rows : img.cols;
    spectrum.reserve(count); // 预分配内存,优化性能
    for (int i = 0; i < count; ++i) {
        auto roi = isRow ? img.row(i) : img.col(i);
        spectrum.push_back(cv::mean(roi).val[0]);
    }
    return spectrum;
}

// 调用示例
vector<float> rowSpectrum = computeAxisSpectrum(cleanImg, true);
vector<float> colSpectrum = computeAxisSpectrum(cleanImg, false);

方式二:枚举类型提升可读性

如果觉得布尔参数表意不够清晰,可以用枚举类型替代:

#include <vector>
#include <opencv2/opencv.hpp>

enum class Axis { Row, Col };

vector<float> computeAxisSpectrum(const cv::Mat& img, Axis axis) {
    vector<float> spectrum;
    const int count = (axis == Axis::Row) ? img.rows : img.cols;
    spectrum.reserve(count);
    for (int i = 0; i < count; ++i) {
        auto roi = (axis == Axis::Row) ? img.row(i) : img.col(i);
        spectrum.push_back(cv::mean(roi).val[0]);
    }
    return spectrum;
}

// 调用示例
vector<float> rowSpectrum = computeAxisSpectrum(cleanImg, Axis::Row);
vector<float> colSpectrum = computeAxisSpectrum(cleanImg, Axis::Col);

两种实现都把重复的遍历、均值计算逻辑完全复用,调用时只需传入目标轴类型即可,大幅减少冗余代码。

内容的提问来源于stack exchange,提问作者Carlos Cuartas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:57:08