从图像上拾取一个点,并水平向右显示以该点为起点的30个像素的光谱曲线
import cv2 import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator #人机交互拾取图像上一个点,并显示水平方向上30个像素的光谱曲线图 def mouse(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: xy = "%d,%d" % (x, y) cv2.circle(img, (x, y), 3, (250, 55, 250), thickness=-1) cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.0, (50, 200, 255), thickness=1) cv2.imshow("image", img) column,line=xy.split(',') l,c=int(line), int(column) print(line, column) X=[] Y1=[] Y2=[] Y3=[] n=40 for i in range(n): X.append(c+i) Y1.append(a[l,c+ i, 0]) Y2.append(a[l,c + i, 1]) Y3.append(a[l,c+ i, 2]) cv2.line(img, ( c,l), (X[-1],l ), color=(0, 0, 255), thickness=2) #显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(8, 4)) x_major_locator = MultipleLocator(2) ax = plt.gca() # ax为两条坐标轴的实例 ax.xaxis.set_major_locator(x_major_locator) plt.plot(X, Y1, label="R", color="red", linewidth=2) plt.plot(X, Y2, label="G", color="green", linewidth=2) plt.plot(X, Y3, label="B", color="blue", linewidth=2) plt.xlabel("Time(s)") plt.ylabel("Value值") plt.title("RGB光谱曲线") plt.show() cv2.imshow("image", img) if __name__ == '__main__': img = cv2.imread('mountain.jpg') print(img.shape) cv2.namedWindow("image") cv2.imshow("image", img) a=img.copy() cv2.setMouseCallback("image", mouse) cv2.waitKey(0) cv2.destroyAllWindows()
效果图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人