Python中plt.plot图像保存有白边,CV2.polyline,fillpoly的参数问题,图像保存颜色发生异常

Python中,如果你遇到了PIL图像保存有白边,CV2.polyline,fillpoly,参数问题,图像保存颜色发生异常这几个问题,这篇文章就能够解决你的疑惑。

第一个问题,plt图像保存有白边

首先,plt图像保存有白边,设置savefig里的参数和plt.tight_layout都无法真正的去除,plt适合画图表,有坐标值的这种。
即使按照这种方案https://blog.csdn.net/jifaley/article/details/79687000,也是没用的,为什么呢?首先,plt是封装了matlab中的plot包,发现matlab中也是有这个问题,matlab解决方案http://blog.sina.com.cn/s/blog_66d4b4620101fvph.html,因为plt.save()时是将整个窗口保存下来的
在python的引用格式:import matplotlib.pyplot as plt

#接下来在试了很多方法后无果
plt.axis('off')
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
#这样都是无法真正去除掉的

改用CV2就可以完美的解决这个问题,试一下后,不错~,因为opencv展示时,是按照图片的大小来展示的

im = cv2.imread('demo.jpg')
cv2.imshow('image',im)
cv2.imwrite('aa.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),95])
cv2.waitKey(0)
cv2.destroyAllWindows()

第二个问题,CV2.polyline,fillpoly的参数

python中cv2.polyline和cv2.fillPoly参数如下:

image.png

很不错的参考链接关于poly的,https://blog.csdn.net/lkiller_hust/article/details/52949020
polyline中

第一个参数是img图像,表示你要在哪张图像上画线
pts表示的是点对,形式如下:
[[[334  33]]

 [[ 44 255]]

 [[444 222]]

 [[ 33 333]]]
isClosed,布尔型,True表示的是线段闭合,False表示的是仅保留线段
color,线段颜色,格式是(R,G,B)值
thickness, 数值型,厚度,默认值为1,如果对封闭图形,正方形,三角形等传入-1,则会填充整个图形。
lineType,线型
shift,默认为0,
COCO_train2014_000000325939.jpg

举一个搞笑唧唧的例子

import cv2
import glob
import numpy as np
from PIL import Image
import matplotlib
import random

#im = np.array(Image.open('COCO_train2014_000000325939.jpg'))
im = cv2.imread('COCO_train2014_000000325939.jpg')
#w,h = im.size
#img = np.array(Image.new('RGB', (w, h), 'black'))
anns = [[184.83,393.26,186.02,387.29,186.62,386.1,195.57,381.92,197.36,380.73,200.93,377.75,205.71,374.17,
          209.29,369.39,213.46,365.22,219.43,362.24,224.8,359.25,236.73,355.67,239.11,355.67,248.66,359.25,
          252.83,362.83,257.01,365.82,261.78,367.6,274.31,370.59,288.62,375.96,301.15,378.94,310.7,382.52,
          319.64,386.1,325.01,389.08,335.75,395.64,347.68,400.41,365.58,403.99,369.15,406.38,378.1,414.13,
          388.24,420.1,400.17,427.26,409.72,433.82,410.91,435.61,389.44,427.26,376.91,426.66,368.56,426.66,
          376.91,433.22,381.08,437.4,386.45,442.17,388.24,445.75,369.15,445.75,360.8,442.77,348.87,441.57,
          333.96,442.17,322.63,442.77,310.7,443.96,299.96,446.94,291.61,451.71,290.41,454.1,289.22,463.05,289.22,473.79,
          285.64,481.54,283.85,494.66,283.25,498.84,273.11,503.61,262.38,501.82,260.59,501.23,254.03,499.44,245.08,500.63,
          230.76,497.65,235.53,495.86,245.08,495.26,252.83,494.07,259.39,491.68,262.38,487.51,262.97,483.93,265.36,479.15,
          267.75,470.21,268.94,462.45,270.13,455.89,264.76,449.33,259.39,447.54,254.62,445.15,245.67,440.98,230.16,430.24,
          224.2,426.66,218.83,422.48,215.25,413.54,214.06,409.96,213.46,406.38,213.46,398.03,212.87,393.26,207.5,390.87,
          206.9,390.87,199.74,390.27,196.16,393.26,190.79,395.64,187.81,395.64],[334,33,44,255,444,222,33,333]

                ]
def showskt(img,anns):

    #c = (np.random.random((1, 3))*0.6+0.4).tolist()[0]


    if len(anns) == 0:
        return 0
    polygons = []
    color = []
    for ann in anns:
        c = np.random.randint(0, 256, 3)
        print(c)
        #c = (np.random.random((1, 3)) * 0.6 + 0.4).tolist()[0]
        pts = np.array(ann).reshape((int(len(ann) / 2), 2))
        pts = pts.reshape((-1, 1, 2))
        print(pts)
        #img = cv2.fillPoly(im,np.int32([pts]),c,cv2.LINE_AA)
        img = cv2.polylines(img, np.int32([pts]), True, c, -1, cv2.LINE_AA)
        cv2.imshow('image',img)


    cv2.imwrite('aa.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),95])
    cv2.waitKey(0)
    cv2.destroyAllWindows()


showskt(im,anns)

看看效果吧,没有白边,线也画出来了,同样,分割的话,就去掉我注释掉的#
img = cv2.fillPoly(im,np.int32([pts]),c,cv2.LINE_AA)就好了

image.png

混用CV和PIL图像读取,图像显示,发生保存颜色发生异常

这是由于plt和cv2图像的通道顺序是不一样的,所以交换第一通道和第三通道就可以了

import numpy as np  
import cv2  
import matplotlib.pyplot as plt  
  
img = cv2.imread('demo.jpg')  
(r, g, b)=cv2.split(img)  
img=cv2.merge([b,g,r])  
  
plt.imshow(img)  
plt.show() 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,780评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,424评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,397评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,576评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,997评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,945评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,107评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,850评论 0 208
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,625评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,804评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,285评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,613评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,291评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,164评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,963评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,096评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,886评论 2 278

推荐阅读更多精彩内容