OpenCV经典100题


在这里插入图片描述

前言

正文

常用知识记录

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的顺序进行排列的。
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);
}

参考

1、图像处理100题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值