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

网站维护包括哪些怎么找人做淘宝网站

网站维护包括哪些,怎么找人做淘宝网站,wordpress qplayer,中国小康建设网 是个什么网站文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、参考 更多有趣的代码示例#xff0c;可参考【Programming】 1、功能描述 基于 opencv-python 库#xff0c;利用形态学的腐蚀和膨胀#xff0c;提取图片中的水平或者竖直线条 2、代码实现 导入基本的库函数 im… 文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、参考 更多有趣的代码示例可参考【Programming】 1、功能描述 基于 opencv-python 库利用形态学的腐蚀和膨胀提取图片中的水平或者竖直线条 2、代码实现 导入基本的库函数 import numpy as np import cv2 as cv读入图片https://raw.githubusercontent.com/opencv/opencv/5.x/doc/tutorials/imgproc/morph_lines_detection/images/src.png增加读错图片的判断机制 1.jpg def main(saveFalse):# Load the imagesrc cv.imread(./1.jpg, cv.IMREAD_COLOR)# Check if image is loaded fineif src is None:print(Error opening image)return -1可视化图片并将其转化为灰度图 # Show source imagecv.imshow(src, src)# [load_image]# [gray]# Transform source image to gray if it is not alreadyif len(src.shape) ! 2:gray cv.cvtColor(src, cv.COLOR_BGR2GRAY)else:gray srcif save:cv.imwrite(gray.jpg, gray)# Show gray imageshow_wait_destroy(gray, gray)# [gray]gray.jpg show_wait_destroy 实现如下 关闭图片后才运行后续代码 def show_wait_destroy(winname, img):cv.imshow(winname, img)cv.moveWindow(winname, 500, 0)cv.waitKey(0)cv.destroyWindow(winname)二进制求反灰度图 并自适应阈值二值化 # [bin]# Apply adaptiveThreshold at the bitwise_not of gray, notice the ~ symbolgray cv.bitwise_not(gray)if save:cv.imwrite(bitwise_not_gray.jpg, gray)bw cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, \cv.THRESH_BINARY, 15, -2)if save:cv.imwrite(adaptiveThreshold.jpg, bw)# Show binary imageshow_wait_destroy(binary, bw)# [bin]bitwise_not_gray.jpg adaptiveThreshold.jpg 复制图片 adaptiveThreshold.jpg 准备提取水平线和竖直线 # [init]# Create the images that will use to extract the horizontal and vertical lineshorizontal np.copy(bw)vertical np.copy(bw)# [init]提取水平线 # [horiz]# Specify size on horizontal axiscols horizontal.shape[1] # 1024 colshorizontal_size cols // 30 # 34# Create structure element for extracting horizontal lines through morphology operationshorizontalStructure cv.getStructuringElement(cv.MORPH_RECT, (horizontal_size, 1))# Apply morphology operationshorizontal cv.erode(horizontal, horizontalStructure)if save:cv.imwrite(erode-horizontal.jpg, horizontal)horizontal cv.dilate(horizontal, horizontalStructure)if save:cv.imwrite(dilate-horizontal.jpg, horizontal)# Show extracted horizontal linesshow_wait_destroy(horizontal, horizontal)# [horiz]首先会构建结构元素 horizontalStructure定义了形态学操作的邻域形状和大小 图片列数 // 30 得到全为 1 的数组 array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], dtypeuint8)接着腐蚀操作 erode-horizontal.jpg 最后膨胀操作 dilate-horizontal.jpg 至此我们就提取到了图片中的水平方向的线条 接下来我们提取竖直方向的线条 # [vert]# Specify size on vertical axisrows vertical.shape[0] # 134verticalsize rows // 30 # 4# Create structure element for extracting vertical lines through morphology operationsverticalStructure cv.getStructuringElement(cv.MORPH_RECT, (1, verticalsize))# Apply morphology operationsvertical cv.erode(vertical, verticalStructure)if save:cv.imwrite(erode-vertical.jpg, vertical)vertical cv.dilate(vertical, verticalStructure)if save:cv.imwrite(dilate-vertical.jpg, vertical)# Show extracted vertical linesshow_wait_destroy(vertical, vertical)# [vert]同理也是先构建一个结构元素 verticalStructure array([[1],[1],[1],[1]], dtypeuint8)腐蚀 erode-vertical.jpg 膨胀 dilate-vertical.jpg 至此我们提取出了竖直方向的线条 可以拓展一下 As you can see we are almost there. However, at that point you will notice that the edges of the notes are a bit rough. For that reason we need to refine the edges in order to obtain a smoother result Extract edges and smooth image according to the logic1. extract edges2. dilate(edges)3. src.copyTo(smooth)4. blur smooth img5. smooth.copyTo(src, edges)dilate-vertical.jpg 二进制求反 # [smooth]# Inverse vertical imagevertical cv.bitwise_not(vertical)if save:cv.imwrite(bitwise_not_vertical.jpg, vertical)show_wait_destroy(vertical_bit, vertical)bitwise_not_vertical.jpg cv2.adaptiveThreshold 适应性阈值二值化 # Step 1edges cv.adaptiveThreshold(vertical, 255, cv.ADAPTIVE_THRESH_MEAN_C, \cv.THRESH_BINARY, 3, -2)if save:cv.imwrite(step1_edges.jpg, edges)show_wait_destroy(edges, edges)得到 step1_edges.jpg实现了边缘检测 看看 cv2.adaptiveThreshold 的介绍仔细分析下实现过程 dst cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)形参 C 从邻域像素的平均值或加权平均值中减去的常数配置的为负数附近颜色相近的变黑eg 纯白区域像素 255阈值 255--2257都变黑再 eg纯黑区域像素 0阈值 0--22也是黑附近颜色变动的变白黑白交替白色的部分保留黑色的部分变黑可以实现边缘提取妙 膨胀强化边缘 # Step 2kernel np.ones((2, 2), np.uint8)edges cv.dilate(edges, kernel)if save:cv.imwrite(step2_edges.jpg, edges)show_wait_destroy(dilate, edges)kernel 为 array([[1, 1],[1, 1]], dtypeuint8)step2_edges.jpg 复制 bitwise_not_vertical.jpg # Step 3smooth np.copy(vertical)模糊处理 step4_smooth.jpg # Step 4smooth cv.blur(smooth, (2, 2))if save:cv.imwrite(step4_smooth.jpg, smooth)记录下 step2_edges.jpg 中像素不为零的部分的坐标也即边缘部分坐标 边缘部分用平滑后的像素替换原来的像素 # Step 5(rows, cols) np.where(edges ! 0)vertical[rows, cols] smooth[rows, cols]# Show final resultshow_wait_destroy(smooth - final, vertical)if save:cv.imwrite(smooth_final.jpg, vertical)# [smooth]3、效果展示 输入 水平线条 竖直线条 平滑竖直线条后的结果 输入图片 水平线 竖直线 平滑竖直线条后的结果 4、完整代码 brief Use morphology transformations for extracting horizontal and vertical lines sample codeimport numpy as np import cv2 as cvdef show_wait_destroy(winname, img):cv.imshow(winname, img)cv.moveWindow(winname, 500, 0)cv.waitKey(0)cv.destroyWindow(winname)def main(saveFalse):# Load the imagesrc cv.imread(./1.jpg, cv.IMREAD_COLOR)# Check if image is loaded fineif src is None:print(Error opening image)return -1# Show source imagecv.imshow(src, src)# [load_image]# [gray]# Transform source image to gray if it is not alreadyif len(src.shape) ! 2:gray cv.cvtColor(src, cv.COLOR_BGR2GRAY)else:gray srcif save:cv.imwrite(gray.jpg, gray)# Show gray imageshow_wait_destroy(gray, gray)# [gray]# [bin]# Apply adaptiveThreshold at the bitwise_not of gray, notice the ~ symbolgray cv.bitwise_not(gray) # (134, 1024)if save:cv.imwrite(bitwise_not_gray.jpg, gray)bw cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, \cv.THRESH_BINARY, 15, -2)if save:cv.imwrite(adaptiveThreshold.jpg, bw)# Show binary imageshow_wait_destroy(binary, bw)# [bin]# [init]# Create the images that will use to extract the horizontal and vertical lineshorizontal np.copy(bw)vertical np.copy(bw)# [init]# [horiz]# Specify size on horizontal axiscols horizontal.shape[1] # 1024 colshorizontal_size cols // 30 # 34# Create structure element for extracting horizontal lines through morphology operationshorizontalStructure cv.getStructuringElement(cv.MORPH_RECT, (horizontal_size, 1))# Apply morphology operationshorizontal cv.erode(horizontal, horizontalStructure)if save:cv.imwrite(erode-horizontal.jpg, horizontal)horizontal cv.dilate(horizontal, horizontalStructure)if save:cv.imwrite(dilate-horizontal.jpg, horizontal)# Show extracted horizontal linesshow_wait_destroy(horizontal, horizontal)# [horiz]# [vert]# Specify size on vertical axisrows vertical.shape[0] # 134verticalsize rows // 30 # 4# Create structure element for extracting vertical lines through morphology operationsverticalStructure cv.getStructuringElement(cv.MORPH_RECT, (1, verticalsize))# Apply morphology operationsvertical cv.erode(vertical, verticalStructure)if save:cv.imwrite(erode-vertical.jpg, vertical)vertical cv.dilate(vertical, verticalStructure)if save:cv.imwrite(dilate-vertical.jpg, vertical)# Show extracted vertical linesshow_wait_destroy(vertical, vertical)# [vert]# [smooth]# Inverse vertical imagevertical cv.bitwise_not(vertical)if save:cv.imwrite(bitwise_not_vertical.jpg, vertical)show_wait_destroy(vertical_bit, vertical)Extract edges and smooth image according to the logic1. extract edges2. dilate(edges)3. src.copyTo(smooth)4. blur smooth img5. smooth.copyTo(src, edges)# Step 1edges cv.adaptiveThreshold(vertical, 255, cv.ADAPTIVE_THRESH_MEAN_C, \cv.THRESH_BINARY, 3, -2)if save:cv.imwrite(step1_edges.jpg, edges)show_wait_destroy(edges, edges)# Step 2kernel np.ones((2, 2), np.uint8)edges cv.dilate(edges, kernel)if save:cv.imwrite(step2_edges.jpg, edges)show_wait_destroy(dilate, edges)# Step 3smooth np.copy(vertical)# Step 4smooth cv.blur(smooth, (2, 2))if save:cv.imwrite(step4_smooth.jpg, smooth)# Step 5(rows, cols) np.where(edges ! 0)vertical[rows, cols] smooth[rows, cols]# Show final resultshow_wait_destroy(smooth - final, vertical)if save:cv.imwrite(smooth_final.jpg, vertical)# [smooth]return 0if __name__ __main__:main(saveTrue)5、参考 Extract horizontal and vertical lines by using morphological operations 更多有趣的代码示例可参考【Programming】
http://www.dnsts.com.cn/news/13938.html

相关文章:

  • 网站建设所用软件小学教学活动设计方案模板
  • 网站色彩搭配原则宁波seo关键词
  • 网站建设 账务处理青海网站制作
  • 网页制作成品模板网站微信商城后台管理系统
  • 建站公司 商城wordpress rclean
  • 山东卓创 网站建设广东seo网站设计
  • excel服务器做网站36kr源码WordPress
  • 记事本做网站的代码付公司制作网站费怎么做凭证
  • 在视频网站中做节目怎么挣钱个人网站制作步骤
  • 网站搭建网站管理织梦网站logo更改
  • 专门教人做点心的网站列举免费域名注册的网站
  • 景县做网站贵州建设厅造价信息网站
  • 最大的网站建设公司百度搜索引擎原理
  • 网站在别人那里已经建好了_公司里要进行修改_怎么做企业画册内容
  • 网站备案授权书填写模板安卓毕业设计代做网站
  • 山东省住房和城乡建设局网站百度网盟推广的 合作网站
  • 中职网站建设与管理wordpress编辑器怎么添加图片
  • 苏州建设银行网站了解基本的php wordpress
  • 企业网站建设 电脑配置建站哪家好
  • 网站建设礼品网站建设方案下载
  • 生物制药公司网站建设做网站用angular
  • 网站升级维护要多久东莞科技网站建设
  • 仿模板电影网站珠海网站开发定制
  • 台州市临海建设局网站虚拟空间网站回收池有什么作用
  • 高水平大学建设大学网站it咨询公司排名
  • 微信 html5 网站wordpress仿qq空间主题
  • 交流网站模版国外有哪些网站
  • 销售的产品是帮别人做网站室内设计师培训班费用
  • 慈溪市建设局网站表格下载有什么做的好的ppt排版网站
  • 建设网站英文翻译关键词搜索引擎工具爱站