使用OpenCV加载图像时,默认使用BGR的格式,而使用matplotlib显示图像时又采用RGB的格式,因此显示图像时,会显得非常奇怪。
如以一张船的照片为例,原图如下:
使用OpenCV进行读取:
import cv2
import matplotlib.pyplot as plt
import numpy as np
ship_BGR = cv2.imread('ship.jpg',cv2.IMREAD_COLOR)
plt.imshow(ship_BGR)
plt.show()
输出的图像结果:
可以很容易发现,这和原图的颜色差的非常多,这一切原因都在于读取channel的顺序,因此需要改变channel顺序。
ship_RGB_1 = ship_BGR[:,:,::-1]
plt.imshow(ship_RGB_1)
plt.show()
输出的图像结果:
ship_RGB_2 = cv2.cvtColor(ship_BGR, cv2.COLOR_BGR2RGB)
plt.imshow(ship_RGB_2)
plt.show()
输出的图像结果:
以上两种方法均适用于BGR图像转换为RGB图像,小伙伴们可根据自己的喜好各取所需。
目录方法一方法二使用OpenCV加载图像时,默认使用BGR的格式,而使用matplotlib显示图像时又采用RGB的格式,因此显示图像时,会显得非常奇怪。如以一张船的照片为例,原图如下:使用OpenCV进行读取:import cv2import matplotlib.pyplot as pltimport numpy as npship_BGR = cv2.imread('ship.jpg',cv2.IMREAD_COLOR) # 第二个参数可以不写,默认值就是以彩色图像方式读取plt.
import cv2 as cv
def color_space_demo(img):
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB转换为GRAY 这里的GRAY是单通道的
cv.imshow(gray, gray)
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) #RGB转换为HSV
cv.imshow(hsv, hsv)
yuv = cv.cvtColor(img, cv.COLOR_RGB2YUV) #RGB转换为YUV
OpenCV学习(2)——图像的BGR格式解读1. opencv读取的图片数据格式2. BGR含义
1. opencv读取的图片数据格式
opencv读取的图片数据格式为numpy的nparray格式。
一张二维图片是由像素点构成,如下图所示:
其中行与列确定了像素点的位置,值确定了颜色,通常为三通道RGB值
举例:[125,225,3]
对应维度:[图片高度,图片宽度,像素BGR值]==[数组行数,数组列数,像素BGR值]
Ps:opencv读取的图片数值为BGR格式,与PIL库读取图片得到的RGB格式不
文章目录方法1:数组切片的方法进行调转方法2:opencv 自身的方法进行调转演示
方法1:数组切片的方法进行调转
img = cv2.imread("cat.jpg")[:,:,::-1]
ax = plt.imshow(img)
对于一张图来说,是一个三位的向量,W∗H∗CW * H * CW∗H∗C ,其中 CCC 是通道数,这个切片的操作,是保留 W∗HW * HW∗H 操作不变,对第三个维度的操作进行反转即: [::−1][::-1][::−1],这样 CCC 中包含的 B,G,R 就变成 R
// @param:
// input: {bgr_image:"读取图像为BGR格式的uchar字符数组", image_width:"图像的宽度", image_height:"图像的高度"}
// output: {rgb_image:"转化为RGB格式图像的uchar字符数组"}
// return: {0:"成功", 1:"输入或输出uchar数组错误"}
int BGR2RGB(const unsigned char* bgr_image , const int image_width , c.
一、格式
转换
opencv读取图片的默认像素排列是
BGR,需要
转换。PIL库是
RGB格式。
caffe底层的
图像处理是基于
opencv,其使用的颜色通道顺序与也是
BGR(Blue-Green-Red),而日常图片存储时颜色通道顺序是
RGB。
在
Python中,将
RGB顺序的
图像转成
BGR顺序,需要调整channel dimension的各颜色通道顺序。
img = cv2.imread(“001.jpg”)
img_ = img[:,:,::-1].transpose((2,0,1))
① 在
opencv里,图格式HWC,其余都是CHW,故transpose((2,0,1))
主要实现RGB32bit图像数据转换为RGB24bit图像数据void RGB32TO24(unsigned char* src, unsigned char* data, int width, int height)和RGB24bit图像数据转换为RGB32bit图像数据,
void RGB24TO32(unsigned char* src, unsigned char* data, int width, int height)
当使用
opencv函数imread()读取图片时,颜色的顺序是
BGR(blue、green、blue),因此我们经常需要将
BGR转RGB。
二、
转换
可以通过以下几种方法实现
BGR转RGB
# 方法一
im_
bgr = cv2.imread('data/src/lena.jpg')
im_
rgb = im_
bgr[:, :, [2, 1, 0]]
Image.fromarray(im_
rgb).save('data/dst/lena_swap.jpg')
# 方法二
im_
bgr = cv2.
opencv中默认读取的图片格式是BGR,并非RGB.
下面是opencv的更直接BGR转RGB方法:
cv::cvtColor(bgr_img, rgb_img, cv::COLOR_BGR2RGB);
下面是通道的分离与合并:
std::vector<cv::Mat> MatVct_1(3);
cv::split(src_img, MatVct_1); //这句话把src_img分离为三个Mat
std::vector<cv::Mat> M