标签: bgr

将OpenCV BGR 8位图像转换为CIE L*a*b*

我正在尝试使用文档中提供的功能将Mat表示具有8位深度的RGB图像的给定转换为Lab:

cvtColor(source, destination, <conversion code>);
Run Code Online (Sandbox Code Playgroud)

我尝试了以下转换代码:

CV_RGB2Lab
CV_BGR2Lab
CV_LBGR2Lab
Run Code Online (Sandbox Code Playgroud)

我每次都收到奇怪的结果,某些样本的"L"值大于100,字面上<107,125,130>.

我也使用Photoshop检查结果 - 但鉴于107超出0≤L≤100的可接受范围,我无法理解我的错误是什么.

更新: 我将在此处发布我的整体结果:给定由8位BGR表示的图像(Mat),可以通过以下方式转换图像:

cvtColor(source, destination, CV_BGR2Lab);
Run Code Online (Sandbox Code Playgroud)

然后可以通过以下方式访问像素值:

int step = destination.step;
int channels = destination.channels();
for (int i = 0; i < destination.rows(); i++) {
    for (int j = 0; j < destination.cols(); j++) {
        Point3_<uchar> pixelData;
        //L*: 0-255 (elsewhere is represented by 0 to 100)
        pixelData.x = destination.data[step*i + channels*j + 0];
        //a*: 0-255 (elsewhere is represented by -127 to 127) …
Run Code Online (Sandbox Code Playgroud)

c++ rgb opencv colors bgr

11
推荐指数
2
解决办法
2万
查看次数

使用YUV颜色空间将CMSampleBufferRef转换为UIImage?

我正在与之合作AVCaptureVideoDataOutput并希望转换CMSampleBufferRefUIImage.许多答案都是一样的,比如从CMSampleBufferRef创建的UIImage没有在UIImageView中显示?AVCaptureSession有多个预览

如果我将VideoDataOutput颜色空间设置为BGRA,则可以正常工作(记入此答案CGBitmapContextCreateImage错误)

NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
[dataOutput setVideoSettings:videoSettings];
Run Code Online (Sandbox Code Playgroud)

如果没有上述视频设置,我将收到以下错误

CGBitmapContextCreate: invalid data bytes/row: should be at least 2560 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipliedFirst.
<Error>: CGBitmapContextCreateImage: invalid context 0x0
Run Code Online (Sandbox Code Playgroud)

使用BGRA不是一个好的选择,因为从YUV(默认的AVCaptureSession颜色空间)到BGRA有转换开销,如Brad和Codo在如何从AVCaptureSession中获取CMSampleBuffer中的Y组件所述?

那么,有没有办法转换CMSampleBufferRefUIImage与YUV色彩空间的工作?

yuv uiimage ios avcapturesession bgr

8
推荐指数
1
解决办法
5640
查看次数

我怎么知道图像是RGB还是BGR格式?

有没有办法事先知道用作系统输入的图像是RGB还是BGR格式?

我正在使用带有java API的opencv,我想将输入图像转换为灰度或L a b*颜色空间,而在opencv中,您必须首先指定要转换的图像是RGB还是BGR.

更新:

我使用的图像类型是.jpg或png

java rgb opencv image-processing bgr

7
推荐指数
3
解决办法
6979
查看次数

是否有一个公式来确定给定BGR值的整体颜色?(OpenCV和C++)

我正在使用C++和OpenCV创建一个函数,它将检测图像中像素的颜色,确定它所在的颜色范围,并用通用颜色替换它.例如,绿色可以从深绿色到浅绿色,程序将确定它仍然是绿色并用简单的绿色替换它,使输出图像看起来非常简单.一切都已设置,但我无法定义每个范围的特征,如果有人知道或者一个公式,给定BGR值,可以确定像素的整体颜色,这很奇怪.如果不是,我将不得不做很多实验,并自己做,但如果已经存在的东西,节省时间.我做了大量的研究,到目前为止还没有找到任何东西.

c++ opencv colors pixels bgr

7
推荐指数
2
解决办法
4338
查看次数

winapi - 24bpp 中的 CreateDIBitmap 是 BGR 而不是 RGB

我正在尝试从数组创建 HBITMAP,其中包含像素的颜色值。问题是,当我尝试创建 24-bpp 位图时,CreateDIBItmap 使用的是 BGR 值,而不是我想要的 RGB 值。

创建Bitmap的代码如下:

 image_size = 600 * 600 * 3;
 aimp_buffer = (char *)malloc(image_size * sizeof(char));
 for (counter = 0; counter < image_size;)
 {
     aimp_buffer[counter++] = 255;
     aimp_buffer[counter++] = 0;
     aimp_buffer[counter++] = 0;
 }

 ads_scrbuf->avo_buffer = (void *)aimp_buffer;
 ads_scrbuf->im_height = 600;
 ads_scrbuf->im_width = 600;
 ads_scrbuf->im_scanline = 600;

 memset(&info, 0, sizeof(info));
 memset(&info.bmiHeader, 0, sizeof(info.bmiHeader));
 info.bmiHeader.biBitCount = 24;
 info.bmiHeader.biHeight= -600;
 info.bmiHeader.biWidth= 600;
 info.bmiHeader.biSize = sizeof(info.bmiHeader);
 info.bmiHeader.biPlanes = 1;
 info.bmiHeader.biCompression = BI_RGB;

 memset(&header, 0, sizeof(BITMAPV5HEADER));
 header.bV5Width …
Run Code Online (Sandbox Code Playgroud)

c rgb winapi bitmapimage bgr

5
推荐指数
1
解决办法
1257
查看次数

python - opencv - 将像素从bgr转换为hsv

img = cv2.imread('example.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# lower mask (0-10)
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255]
mask0 = cv2.inRange(img_hsv, lower_red, upper_red)
# upper mask (170-180)
lower_red = np.array([170, 50, 50])
upper_red = np.array([180, 255, 255])
mask1 = cv2.inRange(img_hsv, lower_red, upper_red)
# join my masks
mask = mask0 + mask1

height = mask.shape[0]
width = mask.shape[1]
# iterate over every pixel
for i in range(height):
    for j in range(width):
        px = mask[i,j]
        print px
        # check …
Run Code Online (Sandbox Code Playgroud)

python opencv pixel hsv bgr

5
推荐指数
1
解决办法
2万
查看次数

YV12 和 NV12 的 ImageWatch 中正确的像素格式是什么?

有一个不错的 Visual Studio 扩展Image Watch

它可以获取 RAM 中的任意地址,并通过@mem操作符将其内容显示为图像。

@mem(address, type, channels, width, height, stride):将原始内存解释为像素,从address( UINT64)开始,带有通道type(请参阅像素格式)、channels( UINT32)、width( UINT32)、height( UINT32) 和stride( UINT32) 的数量。例子:@mem(myimg.data, UINT8, 1, 320, 240, 320)

根据帮助页面,它可以显示几种复杂的像素格式,其中包括BGR、NV12和YV12。

可选地,格式字符串可以与像素格式相关联。它指定了用于渲染的每个通道的语义:

  • RG、紫外线

  • RGB、BGR、YUV

  • RGBA, BGRA

...

还支持许多特殊的 YUV 格式。在这种情况下,格式字符串还定义了数据布局。

  • NV12(两个平面:一个Y平面,一个压缩UV平面,在两个维度上都进行了2次子采样)

  • YV12(三个平面:一个 Y 平面,每个压缩的 U 和 V 平面,在两个维度上都进行了 2 次采样)

但是,我不清楚如何使 Image Watch 以操作符显示图像NV12YV12 …

c++ image-processing debuggervisualizer visual-studio bgr

5
推荐指数
0
解决办法
743
查看次数

从C中的位图读取BGR颜色

我试图从24位BMP文件中获取RGB值.我正在使用的图像是一个很小的图像,都是红色的,所以所有像素都应该是BGR配置B:0 G:0 R:255.我这样做:

int main(int argc, char **argv)
{
    principal();
    return 0;
}

typedef struct {
    unsigned char blue;
    unsigned char green;
    unsigned char red;
} rgb;

typedef struct {
    int ancho, alto;
    rgb *pixeles[MAX_COORD][MAX_COORD];
} tBitmapData;

void principal()
{

    FILE *fichero;
    tBitmapData *bmpdata = (tBitmapData *) malloc(sizeof(tBitmapData));
    rgb *pixel;
    int i, j, num_bytes;
    unsigned char *buffer_imag;
    char nombre[] = "imagen.bmp";
    fichero = fopen(nombre, "r");
    if (fichero == NULL)
            puts("No encontrado\n");
    else {
            fseek(fichero, 18, SEEK_SET);
            fread(&(bmpdata->ancho), sizeof((bmpdata->ancho)), …
Run Code Online (Sandbox Code Playgroud)

c pixel bitmap bgr

3
推荐指数
1
解决办法
3286
查看次数

OpenNI RGB图像到OpenCV BGR IplImage转换?

可以从OpenNI图像元数据获得的图像被布置为RGB图像.我想将其转换为OpenCV IplImage,默认情况下假设数据存储为BGR.我使用以下代码:

    XnUInt8 * pImage = new XnUInt8 [640*480*3]; 
    memcpy(pImage,imageMD.Data(),640*480*3*sizeof(XnUInt8));
    XnUInt8 temp;
    for(size_t row=0; row<480; row++){
        for(size_t col=0;col<3*640; col+=3){
            size_t index = row*3*640+col;
            temp = pImage[index];
            pImage[index] = pImage[index+2];
            pImage[index+2] = temp;
        }
    }
    img->imageData = (char*) pImage;
Run Code Online (Sandbox Code Playgroud)

C/C++中执行此转换的最佳方式(最快)是什么,使RGB图像变为BGR(以IplImage格式)?

rgb opencv bgr openni

2
推荐指数
1
解决办法
7149
查看次数

cv2.cvtcolor bgr2gray 似乎得到一个错误图像

# 代码如下,实现了,但结果可能是错误的,不是我想要的灰度,有人帮我解决,看起来很简单,但我就是不知道哪里错了

import cv2 import matplotlib.pyplot as plt import numpy as np import matplotlib.image as mpimg img = cv2.imread('calibration_test.png')

# i want simply convert the rgb image to grayscale and then print it out
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(gray)
print(gray.shape)
# but the outcome is a colorful image
Run Code Online (Sandbox Code Playgroud)

我使用的原始图像

丑陋的结果

python bgr cv2

2
推荐指数
1
解决办法
7260
查看次数