当前位置: 首页 > news >正文

山东城乡住房建设厅网站用手机制作自己的网站

山东城乡住房建设厅网站,用手机制作自己的网站,家装设计费用怎么收费,网页版面布局OpenCV IMDecode模式说明【生产问题处理】 1 前言 今天售后同事反馈说客户使用我们的图片处理,将PNG图片处理为JPG图片之后,变为了白板。 我们图片处理使用的是openCV来进行处理 2 分析 2.1 图片是否损坏:非标准PNG头部 于是,马…

OpenCV IMDecode模式说明【生产问题处理】

1 前言

今天售后同事反馈说客户使用我们的图片处理,将PNG图片处理为JPG图片之后,变为了白板。

  • 我们图片处理使用的是openCV来进行处理

2 分析

2.1 图片是否损坏:非标准PNG头部

于是,马上写了一个demo尝试本地复现,结果复现概率是:必现。

package mainimport ("fmt""gocv.io/x/gocv"_ "image/jpeg"_ "image/png""io""os"
)func main() {params := []int{gocv.IMWriteJpegQuality, 1}srcFile, err := os.Open("/Users/xxx/GolandProjects/xxx/image-encoder/demo/quality/3.png")if err != nil {fmt.Printf("%v", err)return}defer srcFile.Close()imageBuf, err := io.ReadAll(srcFile)if err != nil {fmt.Printf("%v", err)return}mat, err := gocv.IMDecode(imageBuf, gocv.IMReadUnchanged)if err != nil {fmt.Printf("%v", err)return}buf, err := gocv.IMEncodeWithParams(gocv.JPEGFileExt, mat, params)//buf, err := gocv.IMEncodeWithParams(gocv.JPEGFileExt, mat, params)if err != nil {fmt.Printf("%v", err)return}os.WriteFile("/Users/xxx/GolandProjects/xxx/image-encoder/demo/quality/33.jpg", buf.GetBytes(), os.ModePerm)if err != nil {fmt.Printf("%v", err)return}println("DONE.....")
}

接着尝试将我本地其他的PNG图片转换为JPG,发现可以转换成功。表示这个代码是可以将PNG转换为JPG的。

于是,开始排查是否是客户图片有破损,比如图片的文件头已经损坏,导致它不是一个标准的PNG图片。

在这里插入图片描述

通过查阅资料后发现PNG的头部为89 50 4E 47 0D 0A 1A 0A
在这里插入图片描述

package mainimport ("encoding/hex""fmt""os"
)func main() {filePath := "/Users/xsky/GolandProjects/xxx/image-encoder/demo/quality/11.png" // 替换为你的 PNG 图片文件路径file, err := os.Open(filePath)if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close()header := make([]byte, 8)_, err = file.Read(header)if err != nil {fmt.Println("Error reading file:", err)return}fmt.Println("PNG 文件头的16进制信息:")//89504e470d0a1a0a//89504e470d0a1a0afmt.Println(hex.EncodeToString(header))
}

最终验证发现,客户的PNG图片与我本地PNG图片一致,文件头都是符合PNG格式的。

2.2 Alpha图像通道问题(shooting)

接着想着客户图像是灰白色的,而我之前验证的本地图片为彩色,加上我自己gocv处理图片的参数选择的是gocv.IMReadUnchanged。点进去查看源码,发现还有其他的参数,于是尝试替换其他参数。

//我之前代码的用法
mat, err := gocv.IMDecode(imageBuf, gocv.IMReadUnchanged)
// IMReadUnchanged return the loaded image as is (with alpha channel,
//otherwise it gets cropped).
IMReadUnchanged IMReadFlag = -1 # 处理带有Alpha参数的图像
// IMReadColor always converts image to the 3 channel BGR color image.
IMReadColor IMReadFlag = 1 # 将图片转换为BGR三色通道
// IMReadAnyColor the image is read in any possible color format.
IMReadAnyColor IMReadFlag = 4 # 根据图像自动识别任何可能的格式
...

知道这个参数之后,我将gocv.IMDecode(imageBuf, gocv.IMReadUnchanged)中的IMReadUnchanged改为IMReadAnyColor,最后验证,成功处理客户图片。

目前可以知道,我的图像处理参数选择有问题。于是开始查这几种参数有什么区别。其实点进去看源码就可以知道这几种参数的区别。

这个时候如果对图像处理不熟悉的朋友可能会问,Alpha通道是什么意思,其实大家可以简单的理解为和图像的透明度有关。

为了验证这个结论是否正确,我尝试读取客户的PNG和我本地的彩色PNG的颜色Model是否不同:

//color.RGBAModel # 我自己的图像
//color.Gray16Model # 客户的图像

至此,猜想成立,可以知道是我图像的处理颜色的参数选择有误。

3 拓展:图像color.Model

色彩模型(RGB,RGBA,CMYK灰度)
matplotlib中的色彩定义主要用到了RGB、RGBA、CMYK、灰色四种模型。

  • 这里我主要介绍RGBA模型

对这块感兴趣的朋友可以去看这边文章:https://blog.csdn.net/mighty13/article/details/113616772

3.1 color.RGBAModel:三色+Alpha

带有alpha[RGBA 表示传统的32位预处理 Alpha 色,每个颜色都有8位,分别表示红色,绿色,蓝色和阿尔法。 ]

type RGBA struct {R, G, B, A uint8
}

3.2 color.RGBA64Model:64位表示三色+Alpha的值

带有alpha:64位数来表示每个通道的值

type RGBA64 struct {R, G, B, A uint16
}

3.3 color.NRGBAModel:其他颜色不预乘Alpha的值

NRGBA 表示非 Alpha 预乘32位颜色(非 alpha 预乘表示在进行颜色合成时,颜色值不会提前乘以 alpha 通道的值)

  • 预乘:什么是预乘?假设一个像素点,用RGBA四个分量来表示,记做(R,G,B,A),那预乘后的像素就是(RA,GA,B*A, A),这里A的取值范围是[0,1]。所以,预乘就是每个颜色分量都与该像素的alpha分量预先相乘。可以发现,对于一个没有透明度,或者说透明度为1的像素来说,预乘不预乘结果都是一样的。
  • NRGBA代表一个没有32位透明度加乘的颜色。每个红,绿,蓝和透明度都是8bit的数值
type NRGBA struct {R, G, B, A uint8
}

3.4 color.NRGBA64:非预乘Alpha,其他颜色用64位表示

NRGBA64 表示非 alpha 预乘 64 位颜色,每个红色,绿色,蓝色和 alpha 有 16 位

  • NRGBA64代表无透明度加乘的64-bit的颜色,它的每个红,绿,蓝,和透明度都是个16bit的数值。
type NRGBA struct {R, G, B, A uint16
}

3.5 color.AlphaModel:代表一个8-bit的透明度

type Alpha struct {A uint8
}

3.6 color.Alpha16Model:代表一个16位的透明度

type Alpha struct {A uint16
}

3.7 color.GrayModel:灰度通道,黑白图像

只有一个灰度通道,通常用于表示黑白图像【当你需要读取只带有灰度通道的图像时,你应该使用该标志来读取图像。】【也是由RGB组成,不过由于是单通道,因此呈现灰度】

3.8 color.Gray16Model:16位整数表示灰度通道值

16位整数表示灰度通道的值,通常用于表示黑白

参考:

  • https://blog.csdn.net/zxcasd11/article/details/109446056
  • https://blog.csdn.net/u013943420/article/details/76855416

文章转载自:
http://politicaster.c7510.cn
http://semidominant.c7510.cn
http://voter.c7510.cn
http://warpwise.c7510.cn
http://squareface.c7510.cn
http://euglenid.c7510.cn
http://fratricidal.c7510.cn
http://flesh.c7510.cn
http://overthrew.c7510.cn
http://goitre.c7510.cn
http://pacesetter.c7510.cn
http://chervonets.c7510.cn
http://gid.c7510.cn
http://fur.c7510.cn
http://toe.c7510.cn
http://depreciate.c7510.cn
http://trismus.c7510.cn
http://appreciation.c7510.cn
http://tore.c7510.cn
http://diploe.c7510.cn
http://cuban.c7510.cn
http://paperhanger.c7510.cn
http://oxhide.c7510.cn
http://bastardry.c7510.cn
http://peroneal.c7510.cn
http://institution.c7510.cn
http://baoding.c7510.cn
http://preignition.c7510.cn
http://benorth.c7510.cn
http://headship.c7510.cn
http://amusedly.c7510.cn
http://pyrolusite.c7510.cn
http://bisulphite.c7510.cn
http://gar.c7510.cn
http://continuant.c7510.cn
http://deoxidise.c7510.cn
http://anodynin.c7510.cn
http://leninabad.c7510.cn
http://indulgence.c7510.cn
http://allegorist.c7510.cn
http://rah.c7510.cn
http://regularize.c7510.cn
http://telerecord.c7510.cn
http://wordily.c7510.cn
http://hypercomplex.c7510.cn
http://voracious.c7510.cn
http://terrapin.c7510.cn
http://lockram.c7510.cn
http://fissionable.c7510.cn
http://reassign.c7510.cn
http://spoonful.c7510.cn
http://misspelling.c7510.cn
http://convict.c7510.cn
http://apartotel.c7510.cn
http://lateritization.c7510.cn
http://chasmophyte.c7510.cn
http://bophuthatswana.c7510.cn
http://incidence.c7510.cn
http://stanton.c7510.cn
http://orthocharmonium.c7510.cn
http://disinclination.c7510.cn
http://shirker.c7510.cn
http://exequatur.c7510.cn
http://isolate.c7510.cn
http://ethnohistoric.c7510.cn
http://dong.c7510.cn
http://niamey.c7510.cn
http://fluster.c7510.cn
http://and.c7510.cn
http://endochondral.c7510.cn
http://blockbusting.c7510.cn
http://heterophoric.c7510.cn
http://exanthem.c7510.cn
http://phosphite.c7510.cn
http://paramo.c7510.cn
http://selectric.c7510.cn
http://limnology.c7510.cn
http://cepheus.c7510.cn
http://aqueous.c7510.cn
http://backbreaker.c7510.cn
http://palaearctic.c7510.cn
http://vendee.c7510.cn
http://stewbum.c7510.cn
http://coalport.c7510.cn
http://teutophil.c7510.cn
http://heilongjiang.c7510.cn
http://ustulate.c7510.cn
http://styli.c7510.cn
http://apartness.c7510.cn
http://hypothenar.c7510.cn
http://shearwater.c7510.cn
http://familism.c7510.cn
http://beja.c7510.cn
http://serodifferentiation.c7510.cn
http://kindjal.c7510.cn
http://snakefly.c7510.cn
http://enceinte.c7510.cn
http://celebrity.c7510.cn
http://salivate.c7510.cn
http://justle.c7510.cn
http://www.zhongyajixie.com/news/94336.html

相关文章:

  • 莆田网站制作软件360收录查询
  • 南阳做网站优化百度云官网入口
  • 网站创建费用搜索引擎推广的关键词
  • 福州网站制作设计关键词分析工具
  • 网站如何做关键词seo优化seo牛人
  • 用php做网站不用框架深圳华强北新闻最新消息今天
  • 东莞百度seo找谁珠海网站建设优化
  • wordpress显示页面加载时间郑州seo优化培训
  • 网站如何做问卷调查问卷网站的优化从哪里进行
  • 免备案网站怎么收录五年级下册数学优化设计答案
  • 做网站需要固定ip网络推广公司如何做
  • 河北省建设信息中心网站网络广告策划的步骤
  • 网站服务器在那里找企业管理
  • wordpress博客文章怎么设置徐州关键词优化平台
  • wordpress 导出export.php百度seo排名点击软件
  • 怎样用dw做新闻发布网站上海站群优化公司
  • 网页案例集锦太原seo排名
  • 2019网站seo一键建站免费
  • 公司做网络宣传哪个网站比较好如何制作网站和网页
  • 网站开发技术协议怎么写什么软件可以发帖子做推广
  • 网站界面 欣赏北京seo工程师
  • 新能源纯电动汽车指定关键词排名优化
  • 网站三要素关键词 描述怎么做seo关键词排名优化是什么
  • 学习做ppt 的网站学网络营销
  • 业务网站制作网络营销策略理论
  • 0经验自己做网站友情链接平台赚钱吗
  • asp建网站深圳品牌策划公司
  • 做杂志一般在哪个网站找感觉91永久海外地域网名
  • 微信怎么接入真人客服中山网站seo
  • 上海整站优化公司营销软文广告