生成彩色cmy qr图像时出错

时间:2016-02-22 06:17:27

标签: python image opencv qr-code

我必须生成3张背景色为青色,品红色和黄色的QR图像并合并它们以生成CMY彩色QR,如图1所示。现在生成图像后,使用cv2.merge合并它们,将它们转换为灰色图像,然后合并操作给我图像2而不是图像1(忽略取景器模式的颜色)我使用的是Python 2.7,Open CV 3.0。无法弄清楚我做错了什么。请帮我摆脱这个。提前致谢。

Snapshot1

Snapshot2

我正在使用的代码如下:

import pyqrcode
import cv2
bigcode = pyqrcode.create('When I say it is you', error='L', version=2,mode='binary')
bigcode.png('new1.png', scale=6, module_color=[0, 0, 0], background = [0xff,0xff,0])
bigcode1 = pyqrcode.create('peace that triumphant over war ', error='L', version=2, mode='binary')
bigcode1.png('new2.png', scale=6, module_color=[0, 0, 0], background = [0xff,0,0xff])
bigcode2 = pyqrcode.create('Love that conquers hate ', error='L', version=2, mode='binary')
bigcode2.png('new3.png', scale=6, module_color=[0, 0, 0], background = [0,0xff,0xff])
bigcode.show()
b = bigcode1.show()
c = bigcode2.show()
img1 = cv2.imread('C:/New folder (2)/new1.png')
img2 = cv2.imread('C:/New folder (2)/new2.png')
img3 = cv2.imread('C:/New folder (2)/new3.png')
gray_img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
cv2.imshow('k1',gray_img1)         
gray_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

gray_img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)

k = cv2.merge([gray_img1,gray_img2,gray_img3])

cv2.imshow('k',k)
cv2.imwrite('k.png',k)

cv2.waitKey(0)

2 个答案:

答案 0 :(得分:1)

虽然主人已经得到答案,但想分享@Priya的建议。试图按照以下步骤实施,如果错误,请告诉我。谢谢。

1)创建3个条形码,并分别以R,G,B为背景着色 2)从生成的条形码中取出R,G,B通道并合并在一起 3)将RGB条形码转换为CMYK颜色空间。

import pyqrcode
import cv2
import numpy as np
from PIL import Image

bigcode_r = pyqrcode.create('This is red', error='L', version=2,mode='binary')
bigcode_r.png('bigcode_r.png', scale=12, module_color=[0, 0, 0], background = [0xff,0,0])

bigcode_g = pyqrcode.create('This is green', error='L', version=2, mode='binary')
bigcode_g.png('bigcode_g.png', scale=12, module_color=[0, 0, 0], background = [0,0xff,0])

bigcode_b = pyqrcode.create('This is blue', error='L', version=2, mode='binary')
bigcode_b.png('bigcode_b.png', scale=12, module_color=[0, 0, 0], background = [0,0,0xff])

img_r = cv2.imread('bigcode_r.png')
img_g = cv2.imread('bigcode_g.png')
img_b = cv2.imread('bigcode_b.png')

merge_rgb = cv2.merge((img_b[:,:,0], img_g[:,:,1], img_r[:,:,2]))
#print(k.shape)
cv2.imshow('merge_rgb',merge_rgb)
cv2.imwrite('merge_rgb.jpg', merge_rgb)

#img_str = cv2.imencode('.jpg', merge_rgb)[1].tostring()
#imgpil = Image.open(BytesIO(img_str))

imgpil = Image.open('merge_rgb.jpg')
cmyk_image = imgpil.convert('CMYK')
cmyk_image.save('cmyk_image.jpg')

cmyk_image = cv2.imread('cmyk_image.jpg')
cv2.imshow('cmyk_image',cmyk_image)

cv2.waitKey(0)

Generated barcode

答案 1 :(得分:0)

尝试在cmyk颜色空间中转换rgb,而不是生成c,m,y,k彩色QR。这有助于产生正确的结果。