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

ChatGPT写程序如何?

前言

ChatGPT最近挺火的,据说还能写程序,感到有些惊讶。于是在使用ChatGPT有一周左右后,分享一下用它写程序的效果如何。

1、对于矩阵,把减法操作转换加法?

感觉不错的,能清晰介绍原理,然后写示例程序,还给出了示例的运行结果。

2、写一个程序,矩阵除法转换为矩阵除法

上面是一个简答的例子,要求程序详细一些

当要求程序详细一些时,它会写得很详细些,这个不错的;

但是在解释原理时,公式显示乱码了,这点有待完善。

3、写一个程序,pytorch模型转onnx

对于特定领域的知识(ONNX模型转换),它也是知道的,能根据需求,写出示例程序。

4、写一个程序,遍历彩色图片

5、写一个程序,遍历三维数组

但是呢,上面的程序会报错:

ValueError: index 10016 is out of bounds for array with size 10000

6、写个程序,实现彩色图片灰度化,灰度值是每个通道的平均值

7、使用opencv检测图片的轮廓,拟合直线

import cv2
import numpy as np# 读取图像并转换为灰度图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 对图像进行二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 找到图像中的轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 对每个轮廓拟合多条直线
for cnt in contours:# 近似轮廓epsilon = 0.01 * cv2.arcLength(cnt, True)approx = cv2.approxPolyDP(cnt, epsilon, True)# 计算轮廓的凸包hull = cv2.convexHull(approx, returnPoints=False)# 如果轮廓点的数量不足 5 个,则不做拟合if len(approx) < 5:continue# 寻找轮廓的顶点defects = cv2.convexityDefects(approx, hull)vertices = []for i in range(defects.shape[0]):s, e, f, d = defects[i, 0]start = tuple(approx[s][0])end = tuple(approx[e][0])far = tuple(approx[f][0])vertices.append(far)# 对轮廓进行拟合lines = cv2.fitLine(np.array(vertices), cv2.DIST_L2, 0, 0.01, 0.01)# 绘制拟合直线x0, y0 = int(lines[2] - lines[0] * 100), int(lines[3] - lines[1] * 100)x1, y1 = int(lines[2] + lines[0] * 100), int(lines[3] + lines[1] * 100)cv2.line(img, (x0, y0), (x1, y1), (0, 255, 0), 2)cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

import cv2
import numpy as np# 读取图片
img = cv2.imread('example.png')# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 查找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 对轮廓点集合按照横坐标排序
contour_points = contours[0]
contour_points = contour_points[np.argsort(contour_points[:, :, 0])]# 分离轮廓点集合
mid_x = (contour_points[0][0][0] + contour_points[-1][0][0]) // 2
left_points = contour_points[0:mid_x, :, :]
right_points = contour_points[mid_x:, :, :]# 拟合左侧直线
left_vx, left_vy, left_x, left_y = cv2.fitLine(left_points, cv2.DIST_L2, 0, 0.01, 0.01)# 拟合右侧直线
right_vx, right_vy, right_x, right_y = cv2.fitLine(right_points, cv2.DIST_L2, 0, 0.01, 0.01)# 计算直线的截距和斜率
left_k = left_vy / left_vx
left_b = left_y[0][0] - left_k * left_x[0][0]
right_k = right_vy / right_vx
right_b = right_y[0][0] - right_k * right_x[0][0]# 画出拟合的直线
height, width, _ = img.shape
left_x0 = 0
left_y0 = int(left_k * left_x0 + left_b)
left_x1 = width
left_y1 = int(left_k * left_x1 + left_b)
right_x0 = 0
right_y0 = int(right_k * right_x0 + right_b)
right_x1 = width
right_y1 = int(right_k * right_x1 + right_b)
cv2.line(img, (left_x0, left_y0), (left_x1, left_y1
import cv2
import numpy as np# 读入图像
img = cv2.imread("example.jpg")# 灰度化和边缘检测
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)# 获取轮廓
contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 对每个轮廓进行拟合
for contour in contours:# 拟合直线[vx, vy, x, y] = cv2.fitLine(contour, cv2.DIST_L2, 0, 0.01, 0.01)slope = vy / vxy_intercept = y - slope * xx1 = 0y1 = int(x1 * slope + y_intercept)x2 = img.shape[1] - 1y2 = int(x2 * slope + y_intercept)cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)[vx, vy, x, y] = cv2.fitLine(contour, cv2.DIST_L2, 0, 0.01, 0.01)slope = vy / vxy_intercept = y - slope * xx1 = 0y1 = int(x1 * slope + y_intercept)x2 = img.shape[1] - 1y2 = int(x2 * slope + y_intercept)cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)# 显示结果
cv2.imshow("result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

import cv2
import numpy as np# 读入图片,转为灰度图
img = cv2.imread("image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Canny 边缘检测
edges = cv2.Canny(gray, 50, 150)# 寻找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 画出轮廓
contour_img = np.zeros_like(img)
cv2.drawContours(contour_img, contours, -1, (0, 255, 0), 3)# 对每个轮廓拟合两条直线
line_img = np.zeros_like(img)
for cnt in contours:# 拟合第一条直线[vx, vy, x, y] = cv2.fitLine(cnt, cv2.DIST_L2, 0, 0.01, 0.01)lefty = int((-x * vy / vx) + y)righty = int(((img.shape[1] - x) * vy / vx) + y)cv2.line(line_img, (img.shape[1]-1, righty), (0, lefty), (255, 0, 0), 2)# 拟合第二条直线[vx, vy, x, y] = cv2.fitLine(cnt, cv2.DIST_L2, 0, 0.01, 0.01)lefty = int((-x * vy / vx) + y)righty = int(((img.shape[1] - x) * vy / vx) + y)cv2.line(line_img, (img.shape[1]-1, righty), (0, lefty), (0, 0, 255), 2)# 显示结果
cv2.imshow("Contour", contour_img)
cv2.imshow("Lines", line_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

同样的问题,实现的方式有多种;在编写程序需求时,明确一下思路,它写出来的代码会更符合我们所想的。

import cv2
import numpy as np# 读取图片并进行灰度化处理
img = cv2.imread('test.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 对灰度图像进行边缘检测,如使用 Canny 算法
edges = cv2.Canny(gray, 50, 150)# 找到所有轮廓,并选择一个想要拟合的轮廓
contours, hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]# 对轮廓进行逼近,得到轮廓的拟合线段
epsilon = 0.1 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)# 计算轮廓的重心坐标
M = cv2.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])# 将轮廓点集合分为左右两部分
left_cnt = []
right_cnt = []
for i in range(len(cnt)):if cnt[i][0][0] < cx:left_cnt.append(cnt[i])else:right_cnt.append(cnt[i])left_cnt = np.array(left_cnt)
right_cnt = np.array(right_cnt)# 对左右两部分的点分别进行拟合直线
[vx_l, vy_l, x_l, y_l] = cv2.fitLine(left_cnt, cv2.DIST_L2, 0, 0.01, 0.01)
[vx_r, vy_r, x_r, y_r] = cv2.fitLine(right_cnt, cv2.DIST_L2, 0, 0.01, 0.01)# 得到拟合直线的参数,可以使用直线的一般式或截距式表示
k_l = vy_l / vx_l
b_l = y_l - k_l * x_l
k_r = vy_r / vx_r
b_r =

这个代码没写完,又被中断了;感觉写稍微长一些的代码,就容易出现中断的情况。

总体感受

  1. 对于简单的运算,感觉不错的,能清晰介绍原理,然后写示例程序,还给出了示例的运行结果。

  1. 在示例程序中,要求程序详细一些时,它会写得很详细些,这个不错的。

  1. 对于一些特定领域的知识,它也是知道的,能根据描述需求,写出示例程序。

  1. 有些复杂一些的运算,它写出的程序会报错;这个需要我们检测和修正。

  1. 写稍微长一些的代码,就容易出现中断的情况,代码还没写完呢。

  1. 总体感觉挺挺强的,适合我们去了解一个新的知识(原理和思路),然后参考它的示例程序。

相关文章:

ChatGPT写程序如何?

前言ChatGPT最近挺火的&#xff0c;据说还能写程序&#xff0c;感到有些惊讶。于是在使用ChatGPT有一周左右后&#xff0c;分享一下用它写程序的效果如何。1、对于矩阵&#xff0c;把减法操作转换加法&#xff1f;感觉不错的&#xff0c;能清晰介绍原理&#xff0c;然后写示例程…...

编译链接实战(9)elf符号表

文章目录符号的概念符号表探索前面介绍了elf文件的两种视图&#xff0c;以及两种视图的各自几个组成部分&#xff1a;elf文件有两种视图&#xff0c;链接视图和执行视图。在链接视图里&#xff0c;elf文件被划分成了elf 头、节头表、若干的节&#xff08;section&#xff09;&a…...

React合成事件的原理是什么

事件介绍 什么是事件&#xff1f; 事件是在编程时系统内发生的动作或者发生的事情&#xff0c;而开发者可以某种方式对事件做出回应&#xff0c;而这里有几个先决条件 事件对象 给事件对象注册事件&#xff0c;当事件被触发后需要做什么 事件触发 举个例子 在机场等待检票…...

Arduino-交通灯

LED交通灯实验实验器件&#xff1a;■ 红色LED灯&#xff1a;1 个■ 黄色LED灯&#xff1a;1 个■ 绿色LED灯&#xff1a;1 个■ 220欧电阻&#xff1a;3 个■ 面包板&#xff1a;1 个■ 多彩杜邦线&#xff1a;若干实验连线1.将3个发光二极管插入面包板&#xff0c;2.用杜邦线…...

【论文笔记】Manhattan-SDF == ZJU == CVPR‘2022 Oral

Neural 3D Scene Reconstruction with the Manhattan-world Assumption 本文工作&#xff1a;基于曼哈顿世界假设&#xff0c;重建室内场景三维模型。 1.1 曼哈顿世界假设 参考阅读文献&#xff1a;Structure-SLAM: Low-Drift Monocular SLAM in Indoor EnvironmentsIEEE IR…...

好消息!Ellab(易来博)官方微信公众号开通了!携虹科提供专业验证和监测解决方案

自1949年以来&#xff0c;丹麦Ellab一直通过全球范围内的验证和监测解决方案&#xff0c;协助全球生命科学和食品公司优化和改进其流程的质量。Ellab全面的无线数据记录仪&#xff0c;热电偶系统&#xff0c;无线环境监测系统&#xff0c;校准设备&#xff0c;软件解决方案等等…...

想要去字节跳动面试Android岗,给你这些面试知识点

关于面试字节跳动&#xff0c;我总结一些面试点&#xff0c;希望可以帮到更多的小伙伴&#xff0c;由于篇幅问题这里没有把全部的面试知识点问题都放上来&#xff01;&#xff01;目录&#xff1a;1.网络2.Java 基础&容器&同步&设计模式3.Java 虚拟机&内存结构…...

Java的Lambda表达式的使用

Lambda表达式是Java 8中引入的一个重要特性&#xff0c;它是一种简洁而强大的语法结构&#xff0c;可以用于替代传统的匿名内部类。 Lambda表达式的语法结构如下&#xff1a; (parameters) -> expression或者 (parameters) -> { statements; }其中&#xff0c;paramet…...

Spring MVC 源码 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping

HandlerMapping 组件HandlerMapping 组件&#xff0c;请求的处理器匹配器&#xff0c;负责为请求找到合适的 HandlerExecutionChain 处理器执行链&#xff0c;包含处理器&#xff08;handler&#xff09;和拦截器们&#xff08;interceptors&#xff09;handler 处理器是 Objec…...

超店有数,为什么商家要使用tiktok达人进行营销推广呢?

近几年互联网发展萌生出更多的短视频平台&#xff0c;而tittok这个平台在海外也越来越火爆。与此同时&#xff0c;很多商家也开始用tiktok进行营销推广。商家使用较多的方式就是达人营销&#xff0c;这种方法很常见且转化效果不错。那为什么现在这么多商家喜欢用tiktok达人进行…...

【分享】订阅万里牛集简云连接器同步企业采购审批至万里牛系统

方案场景 面临着数字化转型的到来&#xff0c;不少公司希望实现业务自动化需求&#xff0c;公司内部将钉钉作为办公系统&#xff0c;万里牛作为ERP系统&#xff0c;两个系统之前的数据都储存在各自的后台&#xff0c;导致数据割裂&#xff0c;数据互不相通&#xff0c;人工手动…...

C++类和对象_02----对象模型和this指针

目录C对象模型和this指针1、成员变量和成员函数分开存储1.1、空类大小1.2、非空类大小1.3、结论2、this指针概念2.1、解决名称冲突2.2、在类的非静态成员函数中返回对象本身&#xff0c;可使用return *this2.3、拷贝构造函数返回值为引用的时候&#xff0c;可进行链式编程3、空…...

瑞芯微RK3568开发:烧录过程

进入rk3568这款芯片的烧录模式共有3种方式&#xff0c;先讲需要准备的环境要求。 一、软硬件环境 1、配套sdk版本的驱动DriverAssitant_vx.x.x和RKDevTool_Release_vx.x&#xff0c;版本不对应可能无法烧录&#xff0c;建议直接在sdk压缩包里获取&#xff1b; 2、如果正确安…...

【数据结构】——树和二叉树的概念

目录 1.树概念及结构 1.1树的概念 1.2 树的相关性质 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1二叉树概念 2.2 特殊的二叉树 2.3 二叉树的性质 1.树概念及结构 1.1树的概念 树是一种非线性的数据结构…...

Meta分析在生态环境领域里的应用

Meta分析&#xff08;Meta Analysis&#xff09;是当今比较流行的综合具有同一主题的多个独立研究的统计学方法&#xff0c;是较高一级逻辑形式上的定量文献综述。20世纪90年代后&#xff0c;Meta分析被引入生态环境领域的研究&#xff0c;并得到高度的重视和长足的发展&#x…...

PrivateLoader PPI服务发现RisePro恶意软件窃取分发信息

称为PrivateLoader的按安装付费&#xff08;PPI&#xff09;软件下载器服务正用于恶意软件RisePro的信息窃取。Flashpoint 于 2022 年 12月13日发现了新的窃取者&#xff0c;此前发现了在名为Russian Market的非法网络犯罪市场上使用该恶意软件泄露的“几组日志”。RisePro是一…...

SQL93 返回购买 prod_id 为 BR01 的产品的所有顾客的电子邮件(一)

描述你想知道订购 BR01 产品的日期&#xff0c;有表OrderItems代表订单商品信息表&#xff0c;prod_id为产品id&#xff1b;Orders表代表订单表有cust_id代表顾客id和订单日期order_date&#xff1b;Customers表含有cust_email 顾客邮件和cust_id顾客idOrderItems表prod_idorde…...

Git ---- 概述

Git ---- 概述1. 何为版本控制2. 为什么需要版本控制3. 版本控制的工具集中式版本控制工具分布式版本控制工具4. Git 简史5. Git 工作机制6. Git 和代码托管中心Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 Git 易于学…...

用 tensorflow.js 做了一个动漫分类的功能(二)

前言&#xff1a;前面已经通过采集拿到了图片&#xff0c;并且也手动对图片做了标注。接下来就要通过 Tensorflow.js 基于 mobileNet 训练模型&#xff0c;最后就可以实现在采集中对图片进行自动分类了。这种功能在应用场景里就比较多了&#xff0c;比如图标素材站点&#xff0…...

小林coding

一、图解网络 问大家&#xff0c;为什么要有TCP/Ip网络模型&#xff1f; 对于同一台设备上的进程通信&#xff0c;有很多种方式&#xff0c;比如有管道、消息队列、共享内存、信号等方式&#xff0c;对于不同设备上的进程通信&#xff0c;就需要有网络通信&#xff0c;而设备是…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...