生成彩色 cmy qr 图像时出错
Error in generating colored cmy qr image
我必须生成 3 个背景颜色为青色、品红色和黄色的 QR 图像,并将它们合并以生成 CMY 彩色 QR,如图 1 所示。现在生成图像后,使用 cv2.merge 合并它们,将它们转换成灰度图像然后合并操作给我图像 2 而不是图像 1(忽略取景器图案的颜色)我正在使用 Python 2.7,Open CV 3.0。无法弄清楚我做错了什么。请帮助我摆脱困境。提前致谢。
我使用的代码如下:
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)
尝试在 cmyk 颜色空间中转换 rgb,而不是生成 c、m、y、k 彩色 QR。这将有助于生成正确的结果。
虽然楼主已经得到答案,还是想分享一下@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
我必须生成 3 个背景颜色为青色、品红色和黄色的 QR 图像,并将它们合并以生成 CMY 彩色 QR,如图 1 所示。现在生成图像后,使用 cv2.merge 合并它们,将它们转换成灰度图像然后合并操作给我图像 2 而不是图像 1(忽略取景器图案的颜色)我正在使用 Python 2.7,Open CV 3.0。无法弄清楚我做错了什么。请帮助我摆脱困境。提前致谢。
我使用的代码如下:
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)
尝试在 cmyk 颜色空间中转换 rgb,而不是生成 c、m、y、k 彩色 QR。这将有助于生成正确的结果。
虽然楼主已经得到答案,还是想分享一下@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