OpenCV显示红色,而Image.fromarray之后保存为蓝色?

今天在使用OpenCV和PIL分别将一个numpy.ndarray保存为图片时,发现红蓝颜色竟然颠倒了,代码如下:

cv2.imwrite("im_CV.jpg", image)
im = Image.fromarray(image)
im.save("im_PIL.jpg")
im_CVim_PIL

 

后来发现,OpenCV使用的是BGR模式,而PIL使用的是RGB模式。在OpenCV看来(0,0,255)对应的是(B,G,R)也就是显示红色,而在PIL看来,(0,0,255)对应的是(R,G,B)显示为蓝色,疑问终于解开。

另外,在找问题时发现一个帖子,https://www.it1352.com/1701819.html,上面说使用cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)进行通道转换后,它只是在顺序之间切换,显示效果一样,不影响着色。

我并不认同,做了一点测试,结果如下:

cv2.imshow("im_cv", image)
im_pil = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imshow("im_PIL", im_pil)

初学者,可能有理解有误的地方,希望批评指正,谢谢。

 

好的,以下是使用OpenCV在NAO机器人上实现图像识别蓝色区域并显示Python代码: ```python import cv2 import numpy as np from naoqi import ALProxy # 创建代理对象 camProxy = ALProxy("ALVideoDevice", "127.0.0.1", 9559) # 设置图像分辨率和颜色空间 resolution = 2 # VGA colorSpace = 11 # RGB # 开始摄像头 videoClient = camProxy.subscribe("python_client", resolution, colorSpace, 5) # 获取图像 t0 = cv2.getTickCount() image = np.zeros((480, 640, 3), np.uint8) result = camProxy.getImageRemote(videoClient) if result: t1 = cv2.getTickCount() # 解析图像数据 image_width = result[0] image_height = result[1] image_channels = result[2] image_data = np.fromstring(result[6], dtype=np.uint8) # 将图像数据转化为OpenCV格式 image = np.reshape(image_data, (image_height, image_width, image_channels)) # 显示原图像 cv2.imshow("Original", image) # 转换颜色空间 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 定义蓝色范围 lower_blue = np.array([110,50,50]) upper_blue = np.array([130,255,255]) # 获取蓝色区域 mask = cv2.inRange(hsv, lower_blue, upper_blue) res = cv2.bitwise_and(image,image, mask= mask) # 显示蓝色区域 cv2.imshow("Blue Area", res) # 等待按下任意键退出 cv2.waitKey(0) # 停止摄像头并销毁窗口 camProxy.unsubscribe(videoClient) cv2.destroyAllWindows() ``` 注意:在运行这段代码之前,需要先确保NAO机器人连接到网络,并且在PC上启动了NAO机器人的图像传输服务。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值