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

怎样做网站手机和电脑通用宜和购物电视购物官方网站

怎样做网站手机和电脑通用,宜和购物电视购物官方网站,extjs做的网站,网站商品展示页怎么做的本来说这是很简单的一个内容,图像旋转只需要使用opencv中自带的旋转函数即可完成,但是最近在做特征点旋转的时候发现使用内置rotate函数给图像旋转90度,再用getRotationMatrix2D得出的旋转矩阵对特征点旋转,画出来的特征点位置全部…

        本来说这是很简单的一个内容,图像旋转只需要使用opencv中自带的旋转函数即可完成,但是最近在做特征点旋转的时候发现使用内置rotate函数给图像旋转90度,再用getRotationMatrix2D得出的旋转矩阵对特征点旋转,画出来的特征点位置全部错误!

这是用gpt生成的代码编写的效果(AI还是不靠谱啊)

这里放出AI的代码:

#这里我只放出核心代码
#旋转图像
rotated_img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)#旋转特征点
M = cv2.getRotationMatrix2D((cols/2, rows/2), 90, 1)
rotated_keypoints = []
for kp in keypoints:x, y = kp.ptx -= cols / 2y -= rows / 2rotated_x = x * M[0, 0] + y * M[0, 1] + cols / 2rotated_y = x * M[1, 0] + y * M[1, 1] + rows / 2rotated_keypoints.append(cv2.KeyPoint(rotated_x, rotated_y, kp.size, kp.angle - 90, kp.response, kp.octave, kp.class_id))

       首先我们先研究一下 rotate这个函数:

dst=cv.rotate(src, rotateCode[, dst])

src输入的图像

rotateCode输入需要旋转的flag

这是opencv4.2.0文档介绍cv.ROTATE_90_CLOCKWISE顺时针旋转90度。

这里 rotate函数是按照原图(0,0)点进行旋转的,AI生成的是按照图像的中心点旋转,肯定没法旋转到制定位置。我们改为按照(0,0)结果还是错误。

再来看一下getRotationMatrix2D函数:

正常来说2D平面的旋转是:

可以看出Opencv得出的旋转矩阵是这个矩阵的转置!因为图像的坐标Y轴是向下的,这和数学中的XY坐标相反。

官方参数介绍:

centerCenter of the rotation in the source image.
angleRotation angle in degrees. Positive values mean counter-clockwise rotation (the coordinate origin is assumed to be the top-left corner).
scaleIsotropic scale factor.

angle正则表示逆时针,负数表示顺时针。源码应该改为-90度。这样特征点得到矩阵才是正确的。但是这样旋转后的到坐标还是在原来图像坐标系下的点,我们需要还原到旋转后图像的点。

我们旋转后得到的坐标,转换到旋转图像后的坐标需要在X轴加上一个图像行数

举例子:

原始坐标(1,2)顺时针旋转90度得到坐标(-2,1),这个是在原始坐标系下的坐标。

这个坐标放在新图,位置肯定错误,两个坐标在x轴上相差一个图像的行数(假设图像480*640)

在新图下的坐标为(-2+640,1)=(638,1)。这样我们得到的特征点旋转的坐标才正确。

本文只适应旋转90度这样的类型,如果需要特定角度,这里x,y偏移的坐标需要重新计算。

修改后的源码:

#只需要修改旋转特征点部分
M = cv2.getRotationMatrix2D((0, 0), -90, 1)
rotated_keypoints = []
for kp in keypoints:x, y = kp.ptrotated_x = x * M[0, 0] + y * M[0, 1] + rowsrotated_y = x * M[1, 0] + y * M[1, 1] rotated_keypoints.append(cv2.KeyPoint(rotated_x, rotated_y, kp.size, kp.angle - 90, kp.response, kp.octave, kp.class_id))

 修改源码后的效果:

方便大家获取贴出源码,求个关注收藏:

import cv2
import numpy as np# 读取图像
img = cv2.imread('image.png')# 使用FAST算法提取特征点
fast = cv2.FastFeatureDetector_create()
keypoints = fast.detect(img, None)# 旋转图像
rotated_img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)# 旋转特征点并进行平移
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((0, 0), -90, 1)
rotated_keypoints = []
for kp in keypoints:x, y = kp.ptrotated_x = x * M[0, 0] + y * M[0, 1] + rowsrotated_y = x * M[1, 0] + y * M[1, 1] rotated_keypoints.append(cv2.KeyPoint(rotated_x, rotated_y, kp.size, kp.angle - 90, kp.response, kp.octave, kp.class_id))# 绘制特征点
img_with_keypoints = cv2.drawKeypoints(img, keypoints, None)
rotated_img_with_keypoints = cv2.drawKeypoints(rotated_img, rotated_keypoints, None)# 显示结果
cv2.imshow('Original Image with Keypoints', img_with_keypoints)
cv2.imshow('Rotated Image with Keypoints', rotated_img_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()

参考文章:

OpenCV: OpenCV modules

二维旋转矩阵与向量旋转 - 知乎

http://www.yayakq.cn/news/238971/

相关文章:

  • 设计网站页面注意事项抖音代运营怎么跟客户沟通并成交
  • 多语言社交网站开发自助制作网站
  • 河北中太建设集团有限公司网站搜索引擎优化代理
  • 精通网站建设电子档学科网站建设管理
  • 查权重网站2018网站内容和备案
  • 做网站线上线下价格混乱建筑施工证查询网站
  • 网站降权怎么恢复自己做软件的应用
  • 西安网站建设新闻自己做一个网站难不难
  • 站长工具之家seo查询免费凡科网站
  • 东莞网站关键词5118网站是免费的吗
  • 网站有了备案号之后能做什么什么是搜索引擎竞价推广
  • 网站建设成功案例进出石家庄最新通知
  • 网站建设竞标ppt深圳百度推广开户
  • 网站的ftp账号和密码黄冈推广平台
  • 华茂达建设集团网站网页搜索引擎
  • 什么企业做网站比较方便呢wordpress默认index
  • 学网站建设 赚钱wordpress页面如何显示分类目录
  • 怎样做企业的网站首页网站费用预算
  • 北京建设教育协会网站关键词排名优化应该怎么做
  • 做棋牌网站要什么源码长沙做软件的公司
  • 网站建设需要的硬件响应式网站切图
  • 如何做响应式网站做网页素材
  • 想建设一个网站 一般多少钱深圳网络营销培训
  • 网站运营与管理第二版wordpress 前台登录美化
  • 黄页网站推广环保公司宣传册设计样本
  • 东莞网站建设是什么意思福州做网站
  • 乱码网站怎么办网站建设建站知识
  • 深圳做模板网站网站封了给个能用的
  • 交易所网站开发物流建设网站
  • 站长统计app下载大全做网站要多大空间