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()

python中的cv2模块能否保存图像的地理坐标信息_Python中plt.plot图像保存有白边,CV2.polyline,fillpoly的参数问题,图像保存颜色发生异常...相关推荐

  1. python图像的几何运算_python中图像的几何扭曲

    我想用python对图像执行几何变换,沿着给定的曲线"拉直"或校正图像.似乎scikit图像ProjectiveTransform()和{}对于这一点非常好,但是文档很少.我遵循了 ...

  2. python把模块装到文件夹中_把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案...

    把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功 解决办法是: 在该文件夹下加入空文件__init__.py python2会把 ...

  3. python中的main函数可以被其他文件调用么_Python中在脚本中引用其他文件函数的实现方法...

    在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路径例如包的安装地址.所以如果要在当前脚本引用其他文件,除了将文件放在和 ...

  4. math库是python语言的数学模块对不对_12.下列属于math库中的数学函数的是( )。

    [其它]补交:作业--6折 (800.0分) [填空题]2.在Python集成开发环境中,可使用快捷键 运行程序. [判断题]联络线是车辆调转和送修的通道,也可作为临时运营正线,因此要求坡度平缓和线路 ...

  5. Python 学习笔记 系统模块 面对对象思想 类和对象 类中的方法与对象 构造函数和析构函数

    一.系统模块: UTC:国际标准时间, 格林尼治天文时间,UTC+8 时间戳:指定时间距离1970.1.1 00:00:00的秒数 time:时间 datetime:日期 calendar:万年历 o ...

  6. python中的for语句涉及的序列可以是列表_Python中的列表与循环

    文章中的所有例子全部经过实际测试,可以直接使用.开发环境是python 3.8.5 条件和循环 本章的主要内容是Python的条件和循环语句.主要涉及if.else.elif.while.for.ra ...

  7. python表达式的值是 y 和n是什么意思_python中^是什么意思

    展开全部 在Python" // "表示整数除法. Python其它表达式e69da5e887aa32313133353236313431303231363533313334313 ...

  8. python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...

    背景 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架 ...

  9. python中使用保留字引用当前程序以外的功能库_Python中使用_______保留字引用当前程序以外的功能库...

    [单选题]以下哪个选项不是Python语言的保留字 [简答题]用3分钟的时间尽可能多的写出你能命名的情绪 [填空题]已知列表对象 x = ['11', '2', '3'] ,则表达式 max(x) 的 ...

最新文章

  1. linux 系统 RRDTool安装方法
  2. 电脑时钟不准_电脑维修第三课:常见故障判断(上)
  3. vfp 8.0中image控件的属性:RotateFlip
  4. 在c语言中引用数组元素时,其数组下标的数据类型允许是什么
  5. C# WebApi POST 提交
  6. SpringCloud 从菜鸟到大牛之四 应用通信 Feign Ribbon
  7. java字符串字节_Java中字符串与byte数组之间的相互转换
  8. 简单的redis使用watch完成秒杀抢购功能
  9. JavaScript学习笔记(八)
  10. 图片拉动验证php,php拖动图片卡位验证码
  11. 网络工程师面试常见问题:OSPF篇
  12. 网站文章内容发现重复率过高的解决办法
  13. cppcheck 自定义规则_CppCheck介绍与使用
  14. java translate_java – 当使用translate()方法时,JPanel中的Tit...
  15. 7. 文件和数据格式化
  16. 基于networkx的《人民的名义》人物关系图
  17. 2549. 【NOIP2011模拟9.4】家庭作业 (Standard IO)
  18. PDPS软件:机器人TCP轨迹跟踪功能介绍与使用方法
  19. 单片机关于推挽输出和开漏输出
  20. JNU-数电实验一-初识Multisim和Basys3

热门文章

  1. CSE 110: Principles of Programming Languages
  2. git rebase 的使用
  3. Javascript Array对象 sort()方法,记忆方法,方法扩展
  4. Android 5.0 最应该实现的8个期望
  5. php slug,PHP函数使slug(URL字符串)
  6. 服务器如何识别同一客户端的各种不同的命令_开源项目|如何开发一个高性能的redis cluster proxy?...
  7. springmvc默认方法名为映射名_SpringIoC和SpringMVC的快速入门
  8. Python多线程编程基础1:为什么要使用线程
  9. modelsim仿真不出波形_直接扩频通信(下)仿真
  10. vscode svn插件使用_我最终还是选择了VS code!