在日常生活中,我们看到的大多数彩色图像都是RGB类型,但是在图像处理过程中,常常需要用到灰度图像、二值图像、HSV、HSI等颜色,OpenCV提供了cvtColor()函数实现这些功能。其函数原型如下所示:dst = cv2.cvtColor(src, code[, dst[, dstCn]])
src表示输入图像,需要进行颜色空间变换的原图像;dst表示输出图像,其大小和深度与src一致;code表示转换的代码或标识;dstCn表示目标图像通道数,其值为0时,则有src和code决定。
该函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,其中,RGB是指Red、Green和Blue,一副图像由这三个通道(channel)构成;Gray表示只有灰度值一个通道;HSV包含Hue(色调)、Saturation(饱和度)和Value(亮度)三个通道。在OpenCV中,常见的颜色空间转换标识包括CV_BGR2BGRA、CV_RGB2GRAY、CV_GRAY2RGB、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS等。
下面是调用cvtColor()函数将图像进行灰度化处理的代码。
输出结果如下图所示,左边是彩色的苗族服饰原图,右边是将彩色图像进行灰度化处理之后的灰度图。其中,灰度图将一个像素点的三个颜色变量设置为相当,R=G=B,此时该值称为灰度值。
同样,可以调用 grayImage = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) 核心代码将彩色图像转换为HSV颜色空间,如下图所示。
下面Image_Processing_07_02.py代码对比了九种常见的颜色空间,包括BGR、RGB、GRAY、HSV、YCrCb、HLS、XYZ、LAB和YUV,并循环显示处理后的图像。
q404256651 发布的帖子
-
基于OpenCV的图像灰度化处理
-
一行代码调用提示msg.js
加载中、成功提示、失败提示等,引入 msg.js,一句调用,不依赖任何三方 js、css 。
-
第一步,先引入 msg.js<script src="https://res.weiunity.com/msg/msg.js"></script>
-
第二步,一行代码即使用
msg.info('Hello Msg')
信息提示,2.5 秒后自动关闭
msg.success('操作成功')
成功提示,1.5 秒后自动关闭
msg.failure('操作失败');
失败提示,2.5 秒后自动关闭
msg.loading('加载中');
加载中的提示,图片会有一张动图一直转圈。不会自动关闭,配合 msg.close (); 一起使用
msg.close();
主要用来配合 msg.loading (); 来使用,关闭加载中的提示。
-
-
Angular原生的下拉框组件ng-select
ng-select 是 Angular 6+ 原生的下拉框组件。主要特性:自定义属性和对象的绑定;自定义选项、文本标签、头部和底部模板、虚拟滚动支持,用于处理超过 5000 个条目的数据集、无限滚动、键盘访问、多选项支持、灵活的自动完成,支持客户端和服务器端的过滤、自定义搜索、自定义标签、条目追加、条目分组、输出事件、五障碍使用、良好的测试、支持不同主题。
-
Vue动态拖放组件Vue.Draggable
Vue.Draggable 是基于 Sortable.js 的 Vue 拖放组件。它允许拖放和视图模型数组同步,基于并提供 Sortable.js 的所有功能。完全支持 Sortable.js 功能,保持同步HTML和视图模型列表,与 Vue.js 2.0 transition-group 兼容,支持取消,在需要完全控制时报告任何更改的事件,重用现有的 UI 库组件(例如 vuetify、element 或 vue 材料等)并使用 tag 和 componentData 道具使它们可拖动。
-
中国城市json数据
{ "citys":[ { "title":"A", "lists":[ "阿坝","阿拉善","阿里","安康","安庆","鞍山","安顺","安阳","澳门" ] }, { "title":"B", "lists":["北京","白银","保定","宝鸡","保山","包头","巴中","北海","蚌埠","本溪","毕节","滨州","百色","亳州" ] }, { "title":"C", "lists":["重庆","成都","长沙","长春","沧州","常德","昌都","长治","常州","巢湖","潮州","承德", "郴州","赤峰","池州","崇左","楚雄","滁州","朝阳" ] }, { "title":"D", "lists":["大连","东莞","大理","丹东","大庆","大同","大兴安岭","德宏","德阳","德州","定西","迪庆","东营" ] }, { "title":"E", "lists":["鄂尔多斯","恩施","鄂州"] }, { "title":"F", "lists":["福州","防城港","佛山","抚顺","抚州","阜新","阜阳" ] }, { "title":"G", "lists":["广州","桂林","贵阳","甘南","赣州","甘孜","广安","广元","贵港","果洛"] }, { "title":"H", "lists":["杭州","哈尔滨","合肥","海口","呼和浩特","海北","海东","海南","海西","邯郸","汉中","鹤壁","河池","鹤岗","黑河","衡水","衡阳","河源","贺州","红河","淮安","淮北","怀化","淮南","黄冈","黄南","黄山","黄石","惠州","葫芦岛","呼伦贝尔","湖州","菏泽" ] }, { "title":"J", "lists":["济南","佳木斯","吉安","江门","焦作","嘉兴","嘉峪关","揭阳","吉林","金昌","晋城","景德镇","荆门","荆州","金华","济宁","晋中","锦州","九江", "酒泉" ] }, { "title":"K", "lists":["昆明","开封"] }, { "title":"L", "lists":["兰州","拉萨","来宾","莱芜","廊坊","乐山","凉山","连云港","聊城","辽阳","辽源","丽江","临沧","临汾","临夏","临沂","林芝","丽水","六安","六盘水", "柳州","陇南","龙岩","娄底","漯河","洛阳","泸州","吕梁" ] }, { "title":"M", "lists":["马鞍山","茂名","眉山","梅州","绵阳","牡丹江"] }, { "title":"N", "lists":["南京","南昌","南宁","宁波","南充","南平","南通","南阳","那曲","内江", "宁德","怒江" ] }, { "title":"P", "lists":["盘锦","攀枝花","平顶山","平凉","萍乡","莆田","濮阳"] }, { "title":"Q", "lists":["青岛","黔东南","黔南","黔西南","庆阳","清远","秦皇岛","钦州","齐齐哈尔","泉州","曲靖","衢州"] }, { "title":"R", "lists":["日喀则","日照"] }, { "title":"S", "lists":["上海","深圳","苏州","沈阳","石家庄","三门峡","三明","三亚","商洛","商丘","上饶","山南","汕头","汕尾","韶关","绍兴","邵阳","十堰","朔州","四平","绥化","遂宁","随州","宿迁","宿州" ] }, { "title":"T", "lists":["天津","太原","泰安","泰州","台州","唐山","天水","铁岭","铜川","通化","通辽","铜陵","铜仁","台湾" ] }, { "title":"W", "lists":["武汉","乌鲁木齐","无锡","威海","潍坊","文山","温州","乌海","芜湖","乌兰察布","武威","梧州" ] }, { "title":"X", "lists":["厦门","西安","西宁","襄樊","湘潭","湘西","咸宁","咸阳","孝感","邢台","新乡","信阳","新余","忻州","西双版纳","宣城","许昌","徐州","香港","锡林郭勒","兴安" ] }, { "title":"Y", "lists":["银川","雅安","延安","延边","盐城","阳江","阳泉","扬州","烟台","宜宾","宜昌","宜春","营口","益阳","永州","岳阳","榆林","运城","云浮","玉树","玉溪","玉林","鹰潭" ] }, { "title":"Z", "lists":["杂多县","赞皇县","枣强县","枣阳市","枣庄","泽库县","增城市","曾都区","泽普县","泽州县","札达县","扎赉特旗","扎兰屯市","扎鲁特旗","扎囊县","张北县","张店区","章贡区","张家港","张家界","张家口","漳平市","漳浦县","章丘市","樟树市","张湾区","彰武县","漳县","张掖","漳州","长子县","湛河区","湛江","站前区","沾益县","诏安县","召陵区","昭平县","肇庆","昭通","赵县","昭阳区","招远市","肇源县","肇州县","柞水县","柘城县","浙江","镇安县","振安区","镇巴县","正安县","正定县","正定新区","正蓝旗","正宁县","蒸湘区","正镶白旗","正阳县","郑州","镇海区","镇江","浈江区","镇康县","镇赉县","镇平县","振兴区","镇雄县","镇原县","志丹县","治多县","芝罘区","枝江市","芷江侗族自治县","织金县","中方县","中江县","钟楼区","中牟县","中宁县","中山","中山区","钟山区","钟山县","中卫","钟祥市","中阳县","中原区","周村区","周口","周宁县","舟曲县","舟山","周至县","庄河市","诸城市","珠海","珠晖区","诸暨市","驻马店","准格尔旗","涿鹿县","卓尼","涿州市","卓资县","珠山区","竹山县","竹溪县","株洲","株洲县","淄博","子长县","淄川区","自贡","秭归县","紫金县","自流井区","资溪县","资兴市","资阳" ] } ] }
-
浅谈Vite的优点
Vite 非常非常快,对比 Vue-cli(基于 Webpack):
示例代码:Vue3 项目,10个组件
测试两者的 dev 命令运行耗时相差十倍,且理论上,项目越大性能差距越大,为什么呢?最大的原因是 Vite 在开发模式下并没有做太多打包操作!
Webpack 启动后会做一堆事情,经历一条很长的编译打包链条,从入口开始需要逐步经历语法解析、依赖收集、代码转译、打包合并、代码优化,最终将高版本的、离散的源码编译打包成低版本、高兼容性的产物代码,这可满满都是 CPU、IO 操作啊,在 Node 运行时下性能必然是有问题。
而 Vite 运行 Dev 命令后只做了两件事情,一是启动了一个用于承载资源服务的 service;二是使用 esbuild 预构建 npm 依赖包。之后就一直躺着,直到浏览器以 http 方式发来 ESM 规范的模块请求时,Vite 才开始“按需编译”被请求的模块。
Vite 的用法很简单。Vite 开箱就给你一堆功能,包括 css 预处理器、html 预处理器、hash 命名、异步加载、分包、压缩、HMR 等:这些功能,作者都按行业最佳实践预设好了,通常不需要用户介入做变更。
Vite特别简洁,它只是暴露了极少数的配置项与 plugin 接口,设计上就没打算让你做太多自定义操作,是因为 Vite 从一开始就没打算做成另一个 Webpack,而是做成一套“能够显著提升前端开发体验的前端构建工具”,重在 开发体验 啊同学们,Vite 可谓是用心良苦,想尽办法降低学习入门成本,它就不希望你为了使用工具又学一大堆复杂、缥缈的概念,希望这些事情都在框架层面屏蔽了 —— 虽然代价是丧失灵活性。
简单说吧,Vite 定位就是傻瓜式但强大的构建工具,你专心写好业务代码,早点下班,不用再为了工具费神费力了。
-
渐进式JavaScript 框架
Vue.js的特点易用:已经会了 HTML、CSS、JavaScript?即刻阅读指南开始构建应用!灵活:不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。高效:20kB min+gzip 运行大小,超快虚拟 DOM,最省心的优化。
Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。