opencv画圆与棋盘图

画出的效果如下:
在这里插入图片描述
代码

import os
import cv2
import numpy as np

board_pixel_width=200
ncols=9
nrows=6

if __name__=="__main__":
    image_width=(ncols+1)*board_pixel_width
    image_height=(nrows+1)*board_pixel_width

    res=np.zeros((image_height,image_width,1),np.uint8)
    res[:,:,:]=255
    list=[]
    for i in range(4):
        for j in range(nrows):
            if i==0 and j==0:
                x_point=int(  #最左上角的圆心位置
                    (image_width-board_pixel_width)/ncols*i+board_pixel_width)
                y_point=int(
                    (image_height-board_pixel_width)/nrows*j+board_pixel_width)
            else:  #其它点的圆心位置,在9*6网格图的点中会有上下左右偏移最多50像素的可能性
                x_point=int(
                    (image_width-board_pixel_width)/ncols*i+board_pixel_width+np.random.randint(-board_pixel_width//4,
                                                                                                board_pixel_width//4))
                y_point=int((image_height-board_pixel_width)/nrows*j+board_pixel_width+np.random.randint(
                    -board_pixel_width//4,board_pixel_width//4))

            list.append([x_point,y_point])  #将这个点加入list中
            cv2.circle(res,(x_point,y_point),50,0,-1)  #画这个圆,半径50,颜色黑,实心的

    for i in range(-10,11):  #画左上角十字
        res[50+i,50]=0
        res[50,50+i]=0

    for i in range(-10,11):  #画左下角十字
        res[image_height-50+i,50]=0
        res[image_height-50,50+i]=0

    for i in range(-10,11):  #画中间十字
        res[image_height//2+i,image_width//2]=0
        res[image_height//2,image_width//2+i]=0

    with open("dot1.txt","w") as file:  #写文件,写入所有圆心
        for p in list:
            file.writelines("{} {}\n".format(p[0],p[1]))
    with open("world.txt","w") as file:
        file.writelines("{} {}\n".format(50,50))
        file.writelines("{} {}\n".format(image_height-50,50))
        file.writelines("{} {}\n".format(image_height//2,image_width//2))

    nnrows=6
    nncols=4

    for row in range(0, nnrows):
        for col in range(0, nncols):
            if (row + col) % 2 == 0:
                prow = row#空出行边界
                pcol = col#空出列边界
                # print row, col
                res[100+int(prow * board_pixel_width):100+int((prow + 1) * board_pixel_width),1100+int(pcol * board_pixel_width):1100+int((pcol + 1) * board_pixel_width), :] = 0#把相应块的行列范围变成黑色

    cv2.imwrite("picture.jpg",res)
    print(50,image_height-50)

热门文章

暂无图片
编程学习 ·

好程序员web前端培训分享HTMLCSS学习笔记BFC

好程序员web前端培训分享HTMLCSS学习笔记BFC,BFC(Block formatting context)直译为“块级格式化上下文”。它是一个独立的渲染区域,只有Block-level box(块)参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。 BFC的布局规则 一、内部的Box会在垂…
暂无图片
编程学习 ·

718. 最长重复子数组

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。目录1、题目分析2、解题分析3、代码示例 1:输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组是 [3, 2, 1]。1、题目分析求两个数组公共的子数组的长度,那么可以用较短的那个…
暂无图片
编程学习 ·

css基础学习记录

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>CSS</title><!--也可在head style标签里--><!--<style type="text/css">--><!--p{--><!--color: bisqu…
暂无图片
编程学习 ·

Cause: org/gradle/api/internal/plugins/DefaultConvention

从spring下载了一个springboot初始化项目,gradle-wrapper.properties 中使用了 gradle 6.4(如下)distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip zipStoreBase=GRADL…
暂无图片
编程学习 ·

Hadoop----HDFS的API操作

HDFS文件上传 1、源代码` @Test public void testCopyFromLocalFile() throws IOException,InterruptedException,URISyntaxException{//1、获取文件系统Configuration configuration = new Configuration();configuration.set("dfs.replication","2");//副…
暂无图片
编程学习 ·

去掉无用节点

using UnityEngine; using UnityEditor; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using UnityEditorInternal;// 美术在导出模型时,有很多挂点是没有用的。但有些挂点却是有用的,跟美术沟通,有用挂点的名字。// 再使用…
暂无图片
编程学习 ·

MFC调用winhttp实现简易的HTTP服务器程序

Windows提供的winhttp函数库用来快速实现HTTP协议的应用程序,包括客户端和服务器端。服务器开发一般流程是这样的:1.HttpInitialize 初始化WinHTTP函数库;2.HttpCreateHttpHandle 创建一个HTTP队列句柄,用来接收HTTP请求;3.HttpAddUrl 绑定要监听的URL,写为http://*:80/表…
暂无图片
编程学习 ·

第三章 第一个Java程序 世界你好

学习了前面的两章内容,我相信小伙伴们对于Java有了一定的认识。那么怎么写一个基本的Java程序呢?接下来,我们就通过一个最基本的最简单的程序来看看。在书写代码之前呢?我先介绍几款编译器,也就是常用的代码书写工具。可能有的小伙伴会说,一开始学习不是应该用记事本,然…
暂无图片
编程学习 ·

硕彦博创李飞授---linux 权限 ,计算机基础

的权限:文件对于用户的一种操作许可 1,文件对于用户的分类:创建者 U 群组 G 其他人O 所有用户all 2,权限:读r 写w 执行x 3,文件的权限 【创建者】 【群组】【其他人】 -【rw-】 【rw-】【r–】1 dj dj 323 7月 1 第一位;文件的类型 - 普通文件 d 文件夹 s 网络文件 1…
暂无图片
编程学习 ·

pandas下-综合练习

综合练习端午节的淘宝粽子交易 端午节的淘宝粽子交易 (1) 请删除最后一列为缺失值的行,并求所有在杭州发货的商品单价均值。 df=pd.read_csv(F:\Datewheel资料\pandas组队学习\Pandas(下)综合练习数据集\端午粽子数据.csv) df.head()df.info()#查看列名 df.columns()注意列名…
暂无图片
编程学习 ·

simulink模型延时

simulink模型如果输入与输出有联系形成回路你需要做的就是加一个延时,并且注意是连续的还是离散的
暂无图片
编程学习 ·

[指南]-DeepFaceLab 2.0说明和教程(推荐)

DeepFaceLab 2.0指南/教程此教程机翻自:https://mrdeepfakes.com/forums/thread-guide-deepfacelab-2-0-explained-and-tutorials-recommended什么是DeepFaceLab 2.0?DeepFaceLab 2.0是利用机器学习来交换视频中人脸的工具/应用程序。1.0和2.0有什么区别?DFL 2.0有什么新功能…
暂无图片
编程学习 ·

Java环境安装和配置

**Java环境安装和配置 1.下载 进入下载页面:https://www.oracle.com/java/technologies/javase-downloads.html 2.点击对应版本JDK.Download进入下载界面并选择对应操作系统 3.下载后安装 已经安装过此版本的提示: 点击下一步: 更改都存储路径,不要出现特殊符号和汉字: 2.…
暂无图片
编程学习 ·

ThinkPHP6的前置中间件和后置中间件有哪些区别?

在上一个例子中我们学会了定义中间件,也理解了中间件的含义,再向下翻翻手册,又发现一个叫做“前置中间件”、“后置中间件”,这是什么情况?两者又有和区别呢? 一、定义的区别。 从官网手册中不难发现,前置中间件和后置中间件定义就不同,我们看下面。 前置中间件定义: …
暂无图片
编程学习 ·

浅谈人工智能学习入门

这里写目录标题AI学习战略1、数学基础学习课程2、代码基础学习课程3、机器学习基础学习课程4、深度学习基础学习课程5、强化学习基础6、应用方向 AI学习战略 人工智能的学习,从横向来分,可简单分为工程能力与研究能力,但是学习路线来看,需要纵向来分,可分为如下步骤,需要…
暂无图片
编程学习 ·

【线性代数(2)】n阶行列式三种定义

n阶行列式1. 回顾2. n阶行列式2.1 第一种定义(按行展开)2.2 表示方式2.3 举个例子2.4 三角行列式2.5 第二种定义(按列展开)2.6 第三种定义(随意展开)2.7 习题举例 1. 回顾 先回顾一下之前的三阶行列式,看一下其中的规律 ∣a11a12a13a21a22a23a31a32a33∣=a11∗a22∗a33+…
暂无图片
编程学习 ·

Java 虚拟机逃逸分析

首先先说下为什么需要了解要逃逸分析,在哪里用到。Java堆区是一块用于存储对象实例的内存区,同时也是gc执行垃圾回收的重点区域。所以这也造成gc可能会在大内存的使用和频繁进行垃圾回收过程上成为系统性能瓶颈。为了解决这个问题,jvn设计者开始考虑把对象实例存储到Java堆区…
暂无图片
编程学习 ·

mkfs.ubifs & ubinize 用法

mkfs.ubifs 制作UBIFS 镜像 mkfs.ubifs的用法 Usage: mkfs.ubifs [OPTIONS] target Make a UBIFS file system image from an existing directory tree Examples: Build file system from directory /opt/img, writting the result in the ubifs.img file mkfs.ubifs -m 51…
暂无图片
编程学习 ·

c++ windows console 快速编辑模式 关闭

问题: win10下编写Windows下控制台程序时发现程序经常被阻塞. 原因: windows Powershell 分快速编辑模式和标准模式. 当处于快速编辑模式时, 鼠标点击控制台会导致,改程序被阻塞. 且系统默认情况下,是快速编辑模式 解决: 通过代码重置控制台的属性.HANDLE hStdin = GetStdHand…