【OpenCV】CV_8UC3的解析

        在存储图片的时候我们,我们经常能看到CV_8UC3,CV_8UC2,CV_8UC1之类的东西,今天我们就来解释一下他们的具体含义。

结构类型
CV_<bit_depth>(S|U|F)C<number_of_channels>

该结构可拆分为以下三个部分

  • bit_depth–>bit数,代表图片中每个像素点所占空间的大小,如CV_8UC3,则代表每个像素占8个bit,这里可以取到8/16/32/64。
  • S|U|F
    S : signed int ,有符号整形型。
    U : unsigned int ,无符号整型。
    F : float,单精度浮点型。
  • C<number_of_channels>–> 图片的通道数
    1:单通道图像,即为灰度图像。
    2:双通道图像。
    3:RGB彩色图像,3通道图像。
    4:带Alpha通道的彩色图像,4通道图像。
    双通道图像不常见,通常在程序处理中会用到,如傅里叶变换,可能会用到,一个通道为实数,一个通道为虚数
举例
  1. CV_8UC1 ----->8位无符号整型单通道矩阵
  2. CV_32FC2----->32位浮点型双通道矩阵
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))

#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))

#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))

#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))

#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))

#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))

#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
//该示例截取自腾讯云问答社区
  • 16
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是基于opencv4.5.1 c实现智能抠图的代码: ```c #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 读取图像 Mat image = imread("image.jpg"); // 创建掩码图像 Mat mask = Mat::zeros(image.size(), CV_8UC1); // 创建矩形ROI Rect r(100, 100, 300, 300); // 在掩码中画出ROI rectangle(mask, r, Scalar(255), FILLED); // 创建GrabCut算法需要的输入图像 Mat bgModel, fgModel; Mat grabcutInput; image.copyTo(grabcutInput); // 运行GrabCut算法 grabCut(grabcutInput, mask, r, bgModel, fgModel, 5, GC_INIT_WITH_RECT); // 创建前景掩码 Mat fgMask = (mask == GC_FGD) | (mask == GC_PR_FGD); // 将前景掩码应用于原始图像 Mat result; image.copyTo(result, fgMask); // 显示原始图像和抠图结果 imshow("Original", image); imshow("Result", result); waitKey(); return 0; } ``` 代码解析: 1. 首先,包含了需要的头文件和命名空间。 2. 然后,读取了一张图像并创建了一个掩码图像。 3. 接着,创建了一个矩形ROI并在掩码中画出了该矩形。 4. 创建了GrabCut算法所需的输入图像,并运行了GrabCut算法。 5. 创建了前景掩码并将其应用于原始图像。 6. 最后,显示原始图像和抠图结果,并等待用户按下任意键结束程序。 这段代码实现的是基于GrabCut算法的智能抠图方法,可以根据用户提供的矩形ROI进行抠图。在这个例子中,我们将矩形ROI设置为(100, 100, 300, 300)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值