美文网首页
009 图像色彩空间转换

009 图像色彩空间转换

作者: 几时见得清梦 | 来源:发表于2019-07-29 00:16 被阅读0次
  1. 四种常见的色彩空间:RGB,HSV,YUV,YCrCb
  • RGB是设备无关的、独立于设备的色彩空间;
  • HSV对于直方图相关算法,一般会取得较好效果;
  • YUV是早期欧洲电视行业标准,设备有关,安卓相机的raw data就是YUV色彩空间之后会转为RGB;
  • YCrCb一般用于皮肤检测,根据颜色统计模型,对于有色人种的效果比较好,容易区分出大块的皮肤像素;
  • 另外灰度也是一种色彩空间;
    • cvtColor:OpenCV API,在不同色彩空间进行转换。
    • inRange:提取指定的色彩范围的区域的API,可以搭配HSV色彩空间使用。
HSV三个通道的取值范围
  • 上表的含义:绿色在H、S、V三个通道的最小值分别为3543/46,最大值分别为77/255/255,这样使用inRange函数在三个通道分别划定像素值阈值,即可确定绿色区域。
  • 一些论文中H取值为0-360,而OpenCV中H取值为0-180,原因:OpenCV初期,内存比较贵,360范围太大,为面向工程,节省内存,所以折半取180,可以存为data type为8UC3的类型。
  • 将一些颜色比较鲜明的图像转为HSV空间,会很容易根据颜色提取某部分。
色彩空间转换结果
对hsv空间使用inRange取指定色彩范围

C++

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

using namespace cv;
using namespace std;

int main(int argc, const char *argv[])
{
    Mat src = imread("D:/vcprojects/images/cat.jpg");
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input", WINDOW_AUTOSIZE);
    imshow("input", src);

    // RGB to HSV
    Mat hsv;
    cvtColor(src, hsv, COLOR_BGR2HSV);
    imshow("hsv", hsv);

    // RGB to YUV
    Mat yuv;
    cvtColor(src, yuv, COLOR_BGR2YUV);
    imshow("yuv", yuv);

    // RGB to YUV
    Mat ycrcb;
    cvtColor(src, ycrcb, COLOR_BGR2YCrCb);
    imshow("ycrcb", ycrcb);

    Mat src2 = imread("D:/javaopencv/tinygreen.png");
    imshow("src2", src2);
    cvtColor(src2, hsv, COLOR_BGR2HSV);
    Mat mask;
    inRange(hsv, Scalar(35, 43, 46), Scalar(99, 255, 255), mask);
    imshow("mask", mask);

    waitKey(0);
    return 0;
}

Python

import cv2 as cv

src = cv.imread("D:/vcprojects/images/cat.jpg")
cv.namedWindow("rgb", cv.WINDOW_AUTOSIZE)
cv.imshow("rgb", src)

# RGB to HSV
hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)
cv.imshow("hsv", hsv)

# RGB to YUV
yuv = cv.cvtColor(src, cv.COLOR_BGR2YUV)
cv.imshow("yuv", yuv)

# RGB to YUV
ycrcb = cv.cvtColor(src, cv.COLOR_BGR2YCrCb)
cv.imshow("ycrcb", ycrcb)

src2 = cv.imread("D:/javaopencv/tinygreen.png");
cv.imshow("src2", src2)
hsv = cv.cvtColor(src2, cv.COLOR_BGR2HSV) #转到hsv
mask = cv.inRange(hsv, (35, 43, 46), (77, 255, 255))#三个参数:第一个是输入图像,通常为hsv空间的图像;第二个参数是三个通道对应的低值;第三个参数是三个通道对应的高值;返回像素提取结果。
cv.imshow("mask", mask)

cv.waitKey(0)
cv.destroyAllWindows()

相关文章

  • 009 图像色彩空间转换

    四种常见的色彩空间:RGB,HSV,YUV,YCrCb RGB是设备无关的、独立于设备的色彩空间; HSV对于直方...

  • 002 图像色彩空间转换

    RGB是设备无关的色彩空间,即在各种设备上都可以做到“所见即所得”。 安卓系统的raw data是YUV色彩空间的...

  • OpenCV图像(二)

    图像色彩空间转换:cv2.cvtColor(input_image,flag)最经常用的是RGB转灰度、HSV 查...

  • OpenCV+Python图像读写

    写图像 色彩空间转换 在cv2中列出了所有支持的code,以“COLOR_”开头 读图像 样例 默认情况下,imr...

  • cvtColor(颜色空间转换)

    概念 用于将图像从一个颜色空间转换到另一个颜色空间的转换,比如将彩色图像转换为灰度图像等。 函数讲解 ●函数原型○...

  • cvtColor 函数颜色空间(color space)说明

    色彩空间转换都用到以下约定:8位图像范围是0~255,16位图像范围是0~65536,浮点数的范围是0.0~1.0...

  • 色彩空间转换

    颜色空间的转换用到了如下约定: 8位图像的范围是[0,255] 16位图像的范围是[0,65535] 浮点数图像值...

  • sws_scale的图像色彩空间转换

    阅读ffmpegthumbnailer的代码,其中MovieDecoder::getScaledVideoFram...

  • 图像的色彩空间

    基础要点 这里主要讲了图像色彩空间的处理和色彩空间的基础知识 什么是色彩空间 人们建立了多种的色彩模型,以一维、二...

  • 色彩空间类型转换

    RGB是一种比较常见的色彩空间类型,除此之外还有一些其他的色彩空间,比如常见的包括GRAY色彩空间(灰度图像)、X...

网友评论

      本文标题:009 图像色彩空间转换

      本文链接:https://www.haomeiwen.com/subject/obxcrctx.html