ChatGPT写程序如何?

news2025/2/25 5:54:14

前言

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 / vx
    y_intercept = y - slope * x
    x1 = 0
    y1 = int(x1 * slope + y_intercept)
    x2 = img.shape[1] - 1
    y2 = 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 / vx
    y_intercept = y - slope * x
    x1 = 0
    y1 = int(x1 * slope + y_intercept)
    x2 = img.shape[1] - 1
    y2 = 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. 总体感觉挺挺强的,适合我们去了解一个新的知识(原理和思路),然后参考它的示例程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运动健身用什么耳机好、最健身使用的耳机推荐清单

健身锻炼已经趋向于“国民运动”了&#xff0c;大家都喜欢一边听歌一边挥洒汗水&#xff0c;但是运动时戴的耳机也是有学问在里边的&#xff0c;需要满足佩戴牢固、防水防汗的基本需求&#xff0c;并且&#xff0c;根据每个人运动偏好的不同选择倾向也不同&#xff0c;在这里我…

HDLC简介及相应hdlc实训

HDLC简介 HDLC 协议 高级数据链路控制&#xff08;HDLC&#xff0c;High-level Data Link Control&#xff09;是一种面向比特的链路层协议&#xff0c; 其最大特点是对任何一种比特流&#xff0c;均可以实现透明的传输。HDLC协议具有以下优点。 透明传输&#xff1a;HDLC不…

动漫插画培训班有哪些

动漫培训班有哪些&#xff0c;今天给大家带来的是国内专业的动漫培训机构排名&#xff0c;这5个动漫培训机构&#xff0c;相信你一定都知道&#xff0c;快来看看吧&#xff01; 一&#xff1a;动漫培训机构排名 1、轻微课 轻微课是国内人气很高的板绘学习平台&#xff0c;主打课…

经典文献阅读之--VoxelMap(体素激光里程计)

0. 简介 作为激光里程计&#xff0c;常用的方法一般是特征点法或者体素法&#xff0c;最近Mars实验室发表了一篇文章《Efficient and Probabilistic Adaptive Voxel Mapping for Accurate Online LiDAR Odometry》&#xff0c;同时还开源了代码在Github上。文中为雷达里程计提…

基于机器学习的异常检测与分析技术

传统的运维方式在监控、问题发现、告警以及故障处理等各个环节均存在明显不足&#xff0c;需要大量依赖人的经验&#xff0c;在数据采集、异常诊断分析、故障处理的效率等方面有待提高。 本关键技术面对传统运维故障处理效率低、问题定位不准确、人力成本高三大痛点&#xff0…

AXI实战(二)-跟着产品手册设计AXI-Lite外设(AXI-Lite转串口实现)

AXI实战(二)-跟着产品手册设计AXI-Lite 设(AXI-Lite转串口实现) 看完在本文后,你将可能拥有: 一个AXI_Lite转串口的从端(Slave)设计使用SV仿真AXI-Lite总线的完整体验实现如何在读通道中实现"等待"小何的AXI实战系列开更了,以下是初定的大纲安排: 欢迎感兴趣的…

【机器学习】为什么训练集用fit_transform而测试集只用transform?

文章目录一、解释二、归一化&#xff08;Normalization&#xff09;三、为什么只对训练集做fit_transform&#xff0c;对测试集只做transform&#xff1f;一、解释 fit(): Method calculates the parameters μ and σ and saves them as internal objects.解释&#xff1a;简…

使用vue3+vantUi3.x版本,van-list列表组件,控制台报错

van-list报错过程 在vue3.0vantUi3.x版本中&#xff0c;使用List列表组件时&#xff0c;代码就是官方给的demo&#xff1a; <van-listv-model:loading"loading":finished"finished"finished-text"没有更多了"load"onLoad" >&l…

甘肃西部河谷科技有限公司官网上线 | LTD技术行业案例分享

甘肃西部河谷信息科技有限公司成立于2018年&#xff0c;是一家专业的IT技术推广与服务公司。主营业务有智慧城市、智慧校园、智慧农业、信息技术设备软件研发、集成销售&#xff1b;安防设备、网络工程、市场营销策划、电子商务信息、技术咨询服务等。公司立足高端IT技术服务&a…

CODESYS开发教程11-库管理器

今天继续我们的小白教程&#xff0c;老鸟就不要在这浪费时间了&#x1f60a;。 前面一期我们介绍了CODESYS的文件读写函数库SysFile。大家可能发现了&#xff0c;在CODESYS的开发中实际上是离不开各种库的使用&#xff0c;其中包括系统库、第三方库以及用户自己开发的库。实际…

2023年测试人跳槽新功略,涨薪10K+

软件测试是如何实现涨薪的呢&#xff1f;很多人眼中的软件测试岗位可能是简单的&#xff0c;技术含量不是那么高&#xff0c;就是看看需求、看业务、设计文档、然后点一点功能是否实现&#xff0c;再稍微深入一点就是测试下安装部署时会不会出现兼容性问题&#xff0c;以及易用…

【Spring Cloud Alibaba】002-Spring Cloud Alibaba

【Spring Cloud Alibaba】002-Spring Cloud Alibaba 文章目录【Spring Cloud Alibaba】002-Spring Cloud Alibaba一、Spring Cloud Alibaba 介绍1、介绍2、 Spring Cloud Alibaba 提供的功能模块二、分布式项目搭建1、项目搭建2、访问测试3、结论三、Spring Cloud Alibaba 环境…

一文带你精通分布式锁

在单机环境下&#xff0c;由于使用环境简单和通信可靠&#xff0c;锁的可见性和原子性很容易可以保证&#xff0c;可以简单和可靠地实现锁功能。到了分布式的环境下&#xff0c;由于公共资源和使用方之间的分离&#xff0c;以及使用方和使用方之间的分离&#xff0c;相互之间的…

车机开发【Android SystemUI 架构音量控制详解】

SystemUI介绍 SystemUI摘要 在Android系统中SystemUI是以应用的形式运行在Android系统当中&#xff0c;即编译SystemUI模块会生产APK文件&#xff0c;源代码路径在frameworks/base/packages/SystemUI/&#xff0c;安装路径system/priv-app/-SystemUI。 什么是SystemUI 在前…

Glue Connector 和 Connection 的关系与区别

AWS Glue作为一种无服务器产品&#xff0c;其运行环境是“不可预知”的&#xff0c;也就是“一个黑盒”&#xff0c;所以如何能连接一些自有数据源是Glue必须考虑并给予满足的&#xff0c;为此&#xff0c;Glue给出的解决方案就是Connector和Connection&#xff0c;一个connect…

快鲸scrm发布快递行业私域运营解决方案

现如今&#xff0c;快递行业竞争格局日益激烈&#xff0c;前有“四通一达”等传统快递企业&#xff0c;后有自带互联网基因、绑定电商流量新贵快递企业&#xff0c;如菜鸟、京东等。在这一背景下&#xff0c;很多快递企业开启了增长破局之旅&#xff0c;他们纷纷搭建起私域运营…

高校借力泛微,搭建一体化、流程化的​内控管理平台

财政部《行政事业单位内部控制规范&#xff08;试行&#xff09;》中明确规定&#xff1a;行政事业单位内部控制是指通过制定制度、实施措施和执行程序&#xff0c;实现对行政事业单位经济活动风险的防范和管控&#xff0c;包括对其预算管理、收支管理、采购管理、资产管理、建…

【0基础也能看懂】从0到1落地接口自动化测试

昨天花了几个小时看完了字节XX大佬的《接口测试入门课》&#xff0c;有一些新的收获&#xff0c;结合我自己实践自动化测试的一些经验以及个人理解&#xff0c;这篇文章来聊聊新手如何从零到一落地实践接口自动化测试。为什么要做接口测试测试理念的演变早些时候&#xff0c;软…

【Python入门第十四天】Python 集合

集合&#xff08;Set&#xff09; 集合是无序和无索引的集合。在 Python 中&#xff0c;集合用花括号编写。 实例 创建集合&#xff1a; thisset {"apple", "banana", "cherry"} print(thisset)运行实例 注释&#xff1a;集合是无序的&#…

Kubeadm介绍与使用Kubeadm搭建kubernetes集群环境

Kubeadm介绍 1.通俗点讲&#xff0c;kubeadm跟minikube一样&#xff0c;都是一个搭建kubernetes环境一个工具&#xff1b; 区别在于&#xff1a;minikube是搭建单机kubernetes环境的一个工具 kubeadm是搭建集群kubernetes环境的一个工具&#xff0c;这个常用&#xff1b; 2.对…