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 =
这个代码没写完,又被中断了;感觉写稍微长一些的代码,就容易出现中断的情况。
总体感受
对于简单的运算,感觉不错的,能清晰介绍原理,然后写示例程序,还给出了示例的运行结果。
在示例程序中,要求程序详细一些时,它会写得很详细些,这个不错的。
对于一些特定领域的知识,它也是知道的,能根据描述需求,写出示例程序。
有些复杂一些的运算,它写出的程序会报错;这个需要我们检测和修正。
写稍微长一些的代码,就容易出现中断的情况,代码还没写完呢。
总体感觉挺挺强的,适合我们去了解一个新的知识(原理和思路),然后参考它的示例程序。
ChatGPT写程序如何?相关推荐
- chatgpt写程序-python小游戏-2048-pygame
闲的没事,用chatpgt弄了个小游戏,2048,利用pygame实现,无额外贴图. 只需要告诉他写个python游戏2048,只用pygame实现,不要额外贴图.然后在他暂停后说请继续,最后会有一些 ...
- 如何在 iOS、MacOS 上使用 ChatGPT 和适用于 iPhone 的最佳 ChatGPT 应用程序
目录 什么是聊天 GPT? 如何在我的 iPhone 上使用 ChatGPT? 适用于 iPhone 的最佳 ChatGPT 应用程序 在过去的几周里,出现了许多 ChatGPT 应用程序和网站.如果 ...
- ChatGPT写的C++学习路线是怎样的
ChatGPT写的C++学习路线是怎样的 图片版 文字版 请为我写一条C++全栈学习路线,有以下要求: 1.搜索了以下所有要求的相关资料后再做回答,注意逻辑 2.20000字以上,如果没有说完,自己继 ...
- 莫言用 ChatGPT 写颁奖辞;微软CEO反驳马斯克:我们没有控制OpenAI;SQLite 3.42.0 发布|极客头条
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- 用CPU大法忽悠ChatGPT写前端,油猴子工具库+1
文章目录 用CPU大法忽悠ChatGPT写前端,油猴子工具库+1 源起 对话 1. 作为一名天才js程序员,开发一个油猴子脚本,实现所有浏览器网页的自动下滑功能,每一个步骤都加上中文注释 2. 加一个 ...
- 反其道而行,大学教授鼓励学生用 ChatGPT 写论文
来源 | AI科技大本营 出品 | CSDN(ID:CSDNnews) 新 AI 工具 ChatGPT 的到来,正在教育圈呈现出冰火两重天的态势,教授们几家欢喜几家愁. 这不近日,来自宾夕法尼亚大学沃 ...
- ChatGPT写python代码实录
ChatGPT写python代码实录 print('hello world') 众所周知,咱们程序员学习编程是为了世界好. 所以,咱们就从hello world开始. 然后是一个杨辉三角 def ge ...
- 【真的?】用 ChatGPT 写一篇 Python 翻译库博客,可以打 9 分
今天来个大的实践项目,用 ChatGPT 写一篇博客,冲击一下热榜! 从零开始玩 ChatGPT ⛳️ ChatGPT 亮点 ⛳️ 账号篇 ⛳️ 第一次使用 ⛳️ 用 Python 实现一个英汉互译的 ...
- chatgpt对程序员会造成什么影响
16年阿尔法狗大战李世石的时候,全网也是刷屏AI,宣告程序员即将失业. 我的观点一向很明确:写程序将是世界上最后一个消失的工作. ChatGPT根本不会写程序,它只是在大量人类写的代码基础上进行了总结 ...
最新文章
- AI时代人类需要具备的九种软技能,你get了几个?
- 我们为什么要接受教育
- 第三方分享接口api
- mysql fulltext索引
- 杨幂掐点祝福唐嫣,打破不和传言,情感营销还能这么玩?
- Chrome浏览器切换到之前打开的标签页会重新加载
- 计算机应用能力文字录入,2017全国专业技术人员计算机应用能力考试题库-Excel,Word,XP.pdf...
- android标题栏消失,安卓标题栏为什么没有显示
- 阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结
- 浓郁东方民俗剪纸风新年春节海报,psd分层模板
- 微软苏州校招1月3日在线编程题2——Disk Storage
- Establish(扩展ACL)
- 医院绩效考核病案首页数据上报的难点及解决方案
- requests爬取美图妹子
- 求二叉树的深度 题目编号:376
- 单片机实验(十五)74LS47数码管译码
- html中td内容不换行显示,html小技巧之td,div标签里内容不换行
- DistributedDataParallel(DDP)Pytorch 分布式训练示例及注意事项
- Mstar 编译器的搭建
- 新生搜索神器Microsoft Academic Search与Google scholar、PubMed、wos、embase大PK!