OpenCV经典100题

目录

  • 前言
    • 常用知识记录
      • 1. CV_8UC1,CV_8UC2,CV_8UC3等意思
    • 一、通道交换
    • 二、灰度化
  • 正文
  • 参考

OpenCV经典100题_第1张图片

前言

常用知识记录

1. CV_8UC1,CV_8UC2,CV_8UC3等意思

一般的图像文件格式使用的是 Unsigned 8bits吧,CvMat矩阵对应的参数类型就是
CV_8UC1,CV_8UC2,CV_8UC3。
(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3)

而float 是32位的,对应CvMat数据结构参数就是:CV_32FC1,CV_32FC2,CV_32FC3…
double是64bits,对应CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3等。

一、通道交换

题目: cv2::imread()的系数是按BGR的顺序进行排列的。
OpenCV经典100题_第2张图片
code

//读取图像,然后将BGR通道替换成RGB通道。
//Mat 图像没有长宽一说,只有宽高,这应该就能理解 width = cols   height = rows
void MainWindow::test1ChannelSwap()
{
    Mat sourceImage = imread("../Image/imori.jpg");
    qDebug()<<"--->z MainWindow::test1ChannelSwap()1"<<sourceImage.rows<<sourceImage.cols;
    imshow("sourceImage",sourceImage);
    int width = sourceImage.cols;
    int height = sourceImage.rows;

    Mat newImage = Mat::zeros(height,width,CV_8UC3);
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j<height; j++)
        {
            newImage.at<cv::Vec3b>(i, j)[0] = sourceImage.at<cv::Vec3b>(i, j)[2];
            newImage.at<cv::Vec3b>(i, j)[1] = sourceImage.at<cv::Vec3b>(i, j)[1];
            newImage.at<cv::Vec3b>(i, j)[2] = sourceImage.at<cv::Vec3b>(i, j)[0];

        }
    }

    imshow("newImage",newImage);
}

二、灰度化

题目:灰度是一种图像亮度的表示方法,通过下式计算: Y = 0.2126   R + 0.7152   G + 0.0722   B Y = 0.2126\ R + 0.7152\ G + 0.0722\ B Y=0.2126 R+0.7152 G+0.0722 B
code

void MainWindow::test2Grayscale()
{
    Mat sourceImage = imread("../Image/imori.jpg");
    qDebug()<<"--->z MainWindow::test1ChannelSwap()1"<<sourceImage.rows<<sourceImage.cols;
    imshow("sourceImage",sourceImage);
    int width = sourceImage.cols;
    int height = sourceImage.rows;
    Mat newImage = Mat::zeros(height,width,CV_8UC1);//注意,申请的时候是一个通道就可以了,因为只是一个灰度图而已。
    for (int i = 0; i<height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            newImage.at<uchar>(i,j) = 0.0126 * (float)sourceImage.at<Vec3b>(i,j)[2]+ 0.7152 * (float)sourceImage.at<Vec3b>(i,j)[1] + 0.0722 * (float)sourceImage.at<Vec3b>(i,j)[0];
        }
    }
    imshow("newImage",newImage);
}

正文

参考

你可能感兴趣的:(OpenCV,大数据)