记录一下一些奇怪的问题

有些问题虽然一波操作解决了,但是不知道为啥,这里记录一下:

image.convertTo(image, CV_32FC3)导致数据不一样了

void sub_mean(const cv::Mat &img,cv::Mat &m_out)
{
     const cv::Scalar m_mean = cv::Scalar(104.0,117.0,123.0);
    if(3 != img.channels() || img.empty())
    {
        return false;
    }

    m_out = img - m_mean;
    return ;
}


    cv::Mat image;
    cv::resize(m_src,image,cv::Size(m_SIZE_IMAGE,m_SIZE_IMAGE));
    if(1 == image.channels()) { cv::cvtColor(image,image,CV_GRAY2BGR); }
    image.convertTo(image, CV_32FC3);
    bool b_flg = sub_mean(image,m_out);

这里需要把图像数据转为一维数组数据:

void base_transform(const cv::Mat &m_src,float *data)
{
    int m_SIZE_IMAGE = 320;
    cv::Mat image;
    cv::resize(m_src,image,cv::Size(m_SIZE_IMAGE,m_SIZE_IMAGE));
    if(1 == image.channels()) { cv::cvtColor(image,image,CV_GRAY2BGR); }
//    image.convertTo(image, CV_32FC3); ////////////////////////////////////

    //bgr  2  rgb
    for (int i = 0; i < INPUT_H * INPUT_W; i++) {
        data[i] = (float)(image.at<cv::Vec3b>(i)[2]) * 1.0 - 123.0;
        data[i + INPUT_H * INPUT_W] = (float)(image.at<cv::Vec3b>(i)[1]) * 1.0 - 117.0;
        data[i + 2 * INPUT_H * INPUT_W] = (float)(image.at<cv::Vec3b>(i)[0]) * 1.0  - 104.0;
    }
}

一加image.convertTo(image, CV_32FC3); 这句就会导致数据不一样,不知道为啥

posted @ 2021-03-08 19:02  无左无右  阅读(92)  评论(0编辑  收藏  举报