TensorFlow OpenCv tf与cv图像类型转换
环境:tensorflow 2.0
原始图片[source.jpg]
import os
import cv2
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
assert tf.__version__.startswith('2.')
def tf_img_2_cv_img(img_tf):
"""tensorflow图片 => opencv图片
:param img_tf: tensorflow image
:return: opencv image
"""
img_tf_np = np.array(img_tf)
r, g, b = cv2.split(img_tf_np)
img_cv = cv2.merge([b, g, r])
return img_cv
def cv_img_2_tf_img(img_cv_jpg):
"""opencv 图片 => tensorflow图片
:param img_cv_jpg: opencv 加载的jpg图片
:return: tensorflow 图片
"""
# 3.opencv 图片 => tensorflow图片
img_cv_ecd = cv2.imencode('.jpg', img_cv_jpg)[1]
data_encode = np.array(img_cv_ecd)
str_encode = data_encode.tostring()
img_cv_tf = tf.image.decode_jpeg(str_encode, channels=3)
return img_cv_tf
def main():
# 1.opencv 读取图片
img_cv = cv2.imread("source.jpg")
# 2.tensorflow 读取图片 与图片左右调整
img_file = tf.io.read_file("source.jpg")
img_tf_decode = tf.image.decode_jpeg(img_file, channels=3)
img_flip = tf.image.flip_left_right(img_tf_decode)
# 3.opencv 图片 => tensorflow图片
img_cv_tf = cv_img_2_tf_img(img_cv)
# 4.显示结果 tensorflow image
plt.figure(1, figsize=(1000, 500))
plt.subplot(1, 2, 1)
plt.title("img_tf")
plt.imshow(img_tf_decode)
plt.subplot(1, 2, 2)
plt.title("img_cv_tf")
plt.imshow(img_cv_tf)
plt.show()
# 5.tensorflow图片 => opencv图片
img_tf_cv = tf_img_2_cv_img(img_flip)
# 6.显示结果 opencv image
cv2.imshow("img_cv", img_cv)
cv2.imshow("img_tf_cv", img_tf_cv)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
结果图片