最新要闻
- 学生因毕业问题无颜回家流浪10年 网友:家是永远的港湾
- 什么操作?烈日高温下 女子全副武装趴水泥地上晒背
- Denuvo官方再为D加密伸冤:强调不会影响游戏性能
- 日本北海道高浓度砒霜泄露:蒸汽喷发高达数十米
- 厦门人才中心档案 厦门人才中心
- 全部编辑被开除后:知名游戏网站VGtime官网已无法登陆
- 顾客买到生瓜留言 2年后收到老板回复:已改行 补偿1斤豆腐
- 王宝强新片《八角笼中》成绩出色:票房突破8亿大关
- 高考裸分639:四川考生拿到空军001号招飞录取通知书
- 405g塞进AMD 7840U!AYANEO AIR 1S正式发布:4699元起
- 民营卫星直击重庆万州洪水:长江水都变色了
- 新卓德炮枪,泽丽我才不是刮痧王,不强玩稳吃分
- 历时9年!滇藏铁路丽香段哈巴雪山隧道贯通
- 89元 联想拯救者M3游戏鼠标上架:8000DPI、支持RGB灯效
- 暴雨过后,路面积水很快排干,算不算内涝?
- 时隔四年再次挑战:印度计划7月14日发射“月球3号”探测器
手机

英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌

宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌
- 宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 离婚时共同债务应该怎么处理?
- 华为云盘古大模型3.0正式发布
- 支持自动长文生成,WPS AI发布:基于大语言模型的智能办公助手
- 《街头霸王6》全球总销量突破200万份 卡普空再次为其玩家送上礼物
家电
python-opencv核心库模块core(下)
本章节主要记录opencv核心库模块core的图像旋转,图像拼接,图像仿射变换,图像roi区域提取和图像傅里叶变换等操作。
(相关资料图)
1 图像旋转
opencv提供了将图像沿着坐标轴旋转的函数flip,dst = flip(src, flipcode) flipcode表示旋转的标志,等于0表示沿着x轴旋转,正数表示沿着y轴旋转,负数表示沿着x和y轴旋转。此外,opencv还提供了一种将图像按照角度旋转的函数 rotate,dst = rotate(src, rotateCode) rotatecode旋转标志,等于ROTATE_90_CLOCKWISE表示顺时针旋转90度,等于ROTATE_180表示顺时针旋转180度,等于ROTATE_90_COUNTERCLOCKWISE表示逆时针旋转90度。
import cv2import numpy as np #图像旋转img = cv2.imread("./cat.jpg")flip_x = cv2.flip(img,0) #图片沿着x轴翻转(参数为0)flip_y = cv2.flip(img,2) #图片沿着y轴翻转(参数为正数)flip_xy = cv2.flip(img,-1) #图片沿着x轴和y轴翻转(参数为负数)rotate_90 = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE) #顺时针旋转90度rotate_180 = cv2.rotate(img,cv2.ROTATE_180) #顺时针旋转180度rotate_270 = cv2.rotate(img,cv2.ROTATE_90_COUNTERCLOCKWISE) #顺时针旋转270度(逆时针旋转90度)cv2.imshow("cat",img)cv2.imshow("flip_x",flip_x)cv2.imshow("flip_y",flip_y)cv2.imshow("flip_xy",flip_xy)cv2.imshow("rotate_90",rotate_90)cv2.imshow("rotate_180",rotate_180)cv2.imshow("rotate_270",rotate_270)cv2.waitKey(0)cv2.destroyAllWindows()
2 图像拼接
opencv提供了用于图像拼接的算法,hconcat函数是在水平方向上做图像拼接,vconcat函数是在垂直方向上做图像拼接。对于输入图像组,hconcat函数中的图像必须具有相同的高度和深度;对于vconcat函数,图像必须具有相同的宽度和深度。除了opencv提供的函数,numpy包中也提供了hstack和vstack函数对图像或数组进行水平和垂直方向的拼接。
import cv2import numpy as np #图像拼接img_cat = cv2.imread("./cat.jpg")img_lena = cv2.imread("./lena.jpg")img_cat2 = cv2.resize(img_cat,(480,480)) #对图像进行缩放img_lena2 = cv2.resize(img_lena,(480,480))hconcat_res = cv2.hconcat([img_cat2,img_lena2]) #图像水平拼接,图像必须有相同的高度和深度vconcat_res = cv2.vconcat([img_cat2,img_lena2]) #图像垂直拼接,图像必须有相同的宽度和深度cv2.imshow("hconcat_res",hconcat_res)cv2.imshow("vconcat_res",vconcat_res)#cv2.imshow("hstack",np.hstack([img_cat2,img_lena2])) #也可以用numpy的hstack和vstack函数来拼接#cv2.imshow("vstack",np.vstack([img_cat2,img_lena2]))cv2.waitKey(0)cv2.destroyAllWindows()
3)图像边界拓展
opencv中提供了图像边界拓展(给图像增加边框)的函数copyMaskBorder,dst = copyMaskBorder(src,top,bottom,left,right,borderType,value=None)
参数说明:
top表示上边界边框的尺寸,bottom表示下边界边框的尺寸,left表示左边界边框尺寸,right表示有边界边框尺寸。borderType是图像边界拓展策略(BORDER_CONSTANT=0 用指定像素值边界;BORDER_REPLICATE=1 复制边界像素;BORDER_REFLECT=2 反射复制边界像素;BORDER_WRAP=3 用另一边的像素补偿填充;BORDER_REFLECT_101=4 用边界为对称轴反射复制边界;BORDER_TRANSPARENT=5 透明边界;BORDER_ISOLATED=16 不看ROI之外的部分)value是指定边界像素值。
import cv2import numpy as np #图像边界拓展img = cv2.imread("./cat.jpg")img_border0 = cv2.copyMakeBorder(img,30,30,30,30,cv2.BORDER_CONSTANT,value=[0,0,0]) #边界拓展,边框拓展类型为常值方式img_border2 = cv2.copyMakeBorder(img,30,30,30,30,cv2.BORDER_REFLECT) #反射复制边界像素img_border1 = cv2.copyMakeBorder(img,30,30,30,30,cv2.BORDER_REPLICATE) #复制边界像素值img_border3 = cv2.copyMakeBorder(img,30,30,30,30,cv2.BORDER_WRAP) #用另一边的像素补偿填充cv2.imshow("cat",img)cv2.imshow("img_border0",img_border0)cv2.imshow("img_border1",img_border1)cv2.imshow("img_border2",img_border2)cv2.imshow("img_border3",img_border3)cv2.waitKey(0)cv2.destroyAllWindows()
4)图像傅里叶变换
傅里叶变换是应用最广泛的一种频率变换,它能够将图像从空间域变换到频率域,在频率域进行处理(比如图像锐化或图像去噪),然后通过傅里叶反变换能够将频率域信息变换到空间域内。
数字图像经过傅里叶变换后,得到的频域值是复数。因此,显示傅里叶变换的结果需要使用实数图像(real image)加虚数图像(complex image),或者幅度图像(magnitude image)加相位图像(phase image)的形式。对图像进行傅里叶变换后,我们会得到图像中的低频和高频信息。低频信息对应图像内变化缓慢的灰度分量。高频信息对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。
傅里叶频谱图上我们看到的明暗不一的亮点,其意义是指图像上某一点与领域点差异的强弱,即梯度的大小。也即该点的频率的大小(图像中低频部分指低梯度的点,高频部分相反)。一般来说,梯度大则该点的亮度强,否则该点的亮度弱。
对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰的看出图像频率分布以外,还有一个好处,它可以分离出周期性规律的干扰信号,比如正弦干扰。
opencv提供了实现离散傅里叶变换的函数dft,dst = dft(src, flags=None, nonzeroRows=None) flags表示变换标志,nonzeroRows设置非零行。
在使用该函数的时候,先转换为灰度图像,然后使用np.float32()函数将图像转换成np.float32格式。
注意:由于输出的频谱结果是一个复数,需要调用 cv2.magnitude() 函数将傅里叶变换的双通达结果转换为0到255的范围。opencv实现傅里叶变换和逆变换如下:
import cv2import numpy as np #opencv实现图像傅里叶变换from matplotlib import pyplot as plt%matplotlib inline img = cv2.imread("./cat.jpg")img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #把图像转换为灰度图像img_fc1 = np.float32(img_gray) #把灰度图像的元素值类型转换float型,方便后续计算dft_img = cv2.dft(img_fc1,flags=cv2.DFT_COMPLEX_OUTPUT) #傅里叶变换,转换标识通常为cv2.DFT_COMPLEX_OUTPUT,用来输出一个复数阵列。dftshift = np.fft.fftshift(dft_img) #把零频率分量从左上角移到频谱的中心# print("dftshift",dftshift)# 由于输出的频谱结果是一个复数,需要调用 cv2.magnitude() 函数将傅里叶变换的双通道复数结果转换为单通道浮点型的幅度值res_1 = cv2.magnitude(dftshift[:,:,0],dftshift[:,:,1]) # print("magnitude",res_1)result = 20*np.log(res_1) #需要将幅度值映射到灰度图像的灰度空间【0,255】内,但此时还是浮点型# print("dft",result)#result = result.astype(np.uint8) result = np.round(result).astype("uint8") #result是浮点数,把数据类型转换为uint8# 傅里叶逆变换ishift = np.fft.ifftshift(dftshift) iimg = cv2.idft(ishift)#print("iimg",iimg)#逆变换输出还是浮点数,需要调用 cv2.magnitude() 函数将傅里叶变换的双通道复数结果转换为单通道浮点型的幅度值iresult = cv2.magnitude(iimg[:, :, 0], iimg[:, :, 1]) print("iresult",iresult) #iresult的结果是浮点数,用normalize把数值归一化到[0,255]的整数之间,CV_8U:8位无符号整数(0…255)iresult2 = cv2.normalize(iresult,None,0,255,cv2.NORM_MINMAX,dtype=cv2.CV_8U) print("iresult2",iresult2)cv2.imshow("img_gray",img_gray) #cv显示图片cv2.imshow("dft_image",result)cv2.imshow("idft_image",iresult2)plt.figure(figsize=(14,8)) #plt显示图片plt.subplot(131),plt.imshow(img_gray, cmap="gray"),plt.title("image")plt.subplot(132),plt.imshow(result, cmap="gray"),plt.title("dft_image")plt.subplot(133),plt.imshow(iresult, cmap="gray"),plt.title("idft_image")plt.show()cv2.waitKey(0)cv2.destroyAllWindows()
此外还可以用numpy来实现傅里叶变换和逆变换:
import cv2import numpy as npimport matplotlib.pyplot as plt #numpy实现傅里叶变换%matplotlib inline img = cv2.imread("cat.jpg", 0)#numpy进行傅里叶变换f = np.fft.fft2(img)fshift = np.fft.fftshift(f)#print(fshift)#numpy进行傅里叶逆变换ishift = np.fft.ifftshift(fshift)iimg = np.fft.ifft2(ishift)iimg = np.abs(iimg)print(iimg)plt.subplot(121),plt.imshow(img, cmap="gray"),plt.title("original")plt.subplot(122),plt.imshow(iimg, cmap="gray"),plt.title("result")plt.show()
5)图像仿射变换
仿射变换是实现图像旋转,平移和缩放的常见操作,opencv提供了用于仿射变换的函数warpAffine,dst = warpAffine(src,M,dsize,flags=None) M是2*3的变换矩阵,dsize是输出图像尺寸。flags是插值方式,由interpolationFlags定义。
图像平移:图像平移需要借助变换矩阵[[1,0,h],[0,1,w]] ,平移后的坐标(x",y")=((x+h),(y+w))
import cv2 #图像仿射变换--图像平移,需要借助变换矩阵[[1,0,h],[0,1,w]] ,平移后的坐标(x",y")=((x+h),(y+w)) import numpy as np #放射变换:缩放,平移,旋转,翻转的组合称为仿射变换img_cat = cv2.imread("./cat.jpg")h,w,c =img_cat.shapeM = np.float32([[1,0,100],[0,1,100]]) #变换矩阵,要float32print(M)new_cat = cv2.warpAffine(img_cat,M,dsize=(w,h)) #平移操作,往右下移动100cv2.imshow("img_cat",img_cat)cv2.imshow("new_cat",new_cat)cv2.waitKey(0)cv2.destroyAllWindows()
图像旋转:图像旋转需要通过函数getRotationMatrix2D生成变换矩阵, retval =getRotationMatrix2D(center, angle,scale) center是输入图像旋转中心,angle是旋转角度,正数为逆时针旋转,scale是缩放系数。 然后再调用warpAffine进行旋转变换。
import cv2 #图像仿射变换--图像旋转,需要借助opencv自定义的旋转变换矩阵函数getRotationMatrix2D(旋转中心,旋转角度,缩放比例)import numpy as npimg_cat = cv2.imread("./cat.jpg")h,w,c =img_cat.shapeM = cv2.getRotationMatrix2D((int(w/2),int(h/2)),70,1) #旋转操作矩阵,按照中心点逆时针转,旋转角度为70度,不进行缩放。print(M)new_cat = cv2.warpAffine(img_cat,M,dsize=(w,h)) #按照中心点逆时针旋转cv2.imshow("img_cat",img_cat)cv2.imshow("new_cat",new_cat)cv2.waitKey(0)cv2.destroyAllWindows()
图像自定义变换:需要借助opencv自定义的旋转变换矩阵函数getAffineTransform(原图三个坐标点,变换后的对应三个坐标点),根据变换前后坐标点的对应关系来进行图像变换(可以平移,旋转,拉伸等),自定义变换矩阵后,还是用warpAffine来进行图像变换。
import cv2 #图像仿射变换--图像旋转拉伸平移import numpy as npimg_cat = cv2.imread("./cat.jpg")h,w,c =img_cat.shapesrc = np.float32([(100,100),(120,50),(200,300)]) #原始图像随机三个坐标点dst = np.float32([(120,120),(150,80),(200,350)]) #变换后对应的三个坐标点M = cv2.getAffineTransform(src,dst) #图像变换矩阵print(M)new_cat = cv2.warpAffine(img_cat,M,dsize=(w,h)) cv2.imshow("img_cat",img_cat)cv2.imshow("new_cat",new_cat)cv2.waitKey(0)cv2.destroyAllWindows()
变换后的结果与自定义的坐标点有关,有可能不是自己想要的结果,需要根据需要不断调试三对坐标点。
透视变换:透视变换时在二维平面获得接近真实三维物体的视觉效果的一种算法,即把一个坐标系变换成另外一个坐标系,可以把一张“斜”的图变“正”,把图像投影到一个新的视平面。opencv提供了用于透视变换的函数warpPerspective,dst =warpPerspective(src,M, dsize, flags=None)。3*3的变换矩阵可以通过函数getPerspectiveTransform(src, dst) 获取。src和dst是输入图像和输出图像对应的四边形顶点坐标。
如下可以把一本斜着的书变得”正“一些(输出的矩阵形状与定义的四对坐标点关系比较大):
import cv2 #图像仿射变换--透视变换,即把一个坐标系变换成另外一个坐标系,可以把一张“斜”的图变“正”,把图像投影到一个新的视平面import numpy as np #getPerspectiveTransform(src,dst)获取矩阵,需要原图四个坐标点,变换后的对应四个坐标点。warpPerspective透视变换img_book = cv2.imread("./book.jpg")h,w,c =img_book.shapesrc = np.float32([[10,200],[600,0],[700,500],[200,900]])#四个坐标和对应坐标比较麻烦,需要多次实验判断确定怎么设置效果好(四个角坐标比较好)dst = np.float32([[30,800],[20,60],[600,180],[700,900]])M = cv2.getPerspectiveTransform(src,dst) #透视变换矩阵print(M)new_book = cv2.warpPerspective(img_book,M,dsize=(800,960)) #透视变换 二维平面获得接近三维物体的视觉效果的算法cv2.imshow("img_book",img_book)cv2.imshow("new_book",new_book)cv2.waitKey(0)cv2.destroyAllWindows()
6)更改图片背景颜色
上图的签名图片背景是灰色,插入某些文档中会比较突兀,如果可以把背景变成白色或者需要的颜色就好了,通过分析:前景签名的像素值小于100,背景像素值都高于100,可以通过对像素值的比较进行分离,然后单独对背景颜色进行处理。
import cv2import numpy as np #更改图片背景颜色(前景签名的像素值小于100,背景像素值都高于100,通过对像素值的比较进行分离)def erase_background(img): height = img.shape[0] width = img.shape[1] channel = img.shape[2] #图像的bgr三通道 print("width:%s,height:%s,channel:%s"%(width,height,channel)) for row in range(height): for col in range(width): for c in range(channel): if img[row,col,c] >100: # img[row,col,c]=255 # 将对应通道对应像素坐标的像素值都改为255,背景变为[255,255,255],背景变白色 img[row,col,0]=0 #将红色通道的背景像素值全改为0 img[row,col,1]=0 #将蓝色通道的背景像素值改为0,背景变为[0,:,0],背景变为绿色 cv2.imshow("erase_background",img)src = cv2.imread("handwrite.jpg")cv2.imshow("origin",src)erase_background(src)cv2.waitKey(0)cv2.destroyAllWindows()
把背景改成白色,效果如下:
也可以把背景改成其他颜色,比如红色:
7)图像roi区域提取
图像roi提取,用鼠标选取感兴趣区域,按enter分割保存。手动提取感兴趣区域,这个应用有时候挺有用的,opencv提供了一个函数 selectROI,dst = selectROI(windowname, img)
windowname表示选取的区域被显示在窗口的名字,img表示被选取图像。返回值dst是一个元组(x, y, w, h)表示选取roi的左上角坐标和矩形的宽高。
import cv2 #图像roi提取,用鼠标选取感兴趣区域,按enter分割保存img = cv2.imread("./cat.jpg")cv2.imshow("original", img)# 选择ROIroi = cv2.selectROI("original", img) #鼠标选取感兴趣区域,返回tuple元组(左上角坐标,roi区域的宽高)print(roi)x, y, w, h = roi # 显示ROI并保存图片if roi != (0, 0, 0, 0): crop = img[y:y+h, x:x+w] # 切片img[高,宽,通道] cv2.imshow("crop", crop) cv2.imwrite("./crop.jpg", crop) print("Saved!")# 退出cv2.waitKey(0)cv2.destroyAllWindows()
关键词:
-
-
-
-
python-opencv核心库模块core(下)
开心档之Web Quality - 无障碍(WAI)
学生因毕业问题无颜回家流浪10年 网友:家是永远的港湾
什么操作?烈日高温下 女子全副武装趴水泥地上晒背
Docker学习路线1:介绍
Denuvo官方再为D加密伸冤:强调不会影响游戏性能
日本北海道高浓度砒霜泄露:蒸汽喷发高达数十米
厦门人才中心档案 厦门人才中心
全部编辑被开除后:知名游戏网站VGtime官网已无法登陆
顾客买到生瓜留言 2年后收到老板回复:已改行 补偿1斤豆腐
王宝强新片《八角笼中》成绩出色:票房突破8亿大关
高考裸分639:四川考生拿到空军001号招飞录取通知书
405g塞进AMD 7840U!AYANEO AIR 1S正式发布:4699元起
民营卫星直击重庆万州洪水:长江水都变色了
新卓德炮枪,泽丽我才不是刮痧王,不强玩稳吃分
Centos7中禁止root用户远程登录和修改登录端口
历时9年!滇藏铁路丽香段哈巴雪山隧道贯通
89元 联想拯救者M3游戏鼠标上架:8000DPI、支持RGB灯效
暴雨过后,路面积水很快排干,算不算内涝?
时隔四年再次挑战:印度计划7月14日发射“月球3号”探测器
销售顾问播放竞品视频?哈弗副总经理乔心昱:并非系统性销售行为
浏阳市:暑期课堂点亮孩子缤纷假期
通用曲线控件源码定制之设计实现篇(功能丰富灵活) 浮云E绘图
rust 自动化测试、迭代器与闭包、智能指针、无畏并发
String内存模型和Java常用方法
华为云河图KooMap:夯实数字孪生底座,点燃燎原星火
江苏女孩中考742分报考师范专科引争议 家长:不差钱 7年贯通培养有编制
离谱!智己L7后尾灯可以玩“魂斗罗” 奥迪灯厂也得服
售价17.59万起 全新雪弗兰迈锐宝XL上市 这内饰你能接受吗?
顺河镇细处作手推动作风建设
电动轮椅上下班靠谱吗?广州明天举行听证会:事关电动自行车限行
广州一特斯拉闯红灯撞电瓶车致1死 另一路人擦肩而过躲过一劫
线性表
美国地质局调查报告:美国近一半自来水含有毒物质
别买白色、黑色汽车了:保值率堪忧!二手亏出血
分别配齐苹果、OPPO和华为全家桶后:悟出一个深刻道理
对标传祺影豹R?奇瑞艾瑞泽8 2.0T高能版即将上市
【补】托勒密定理
瀚川智能发布100PPM全极耳大圆柱高速自动化装配整线
舒适透气 吸湿排汗:大嘴猴棉背心14元/件(日常24元)
大马拉小车的RTX 4060 Ti 16GB来了:让人看不懂
销量暴跌近七成 被称作“国民神车”的五菱MINI EV为啥卖不动了?
数据交换不失控:华为云EDS,让你的数据你做主
轻松集团马孝武:行业间需要加强协作 进行精细化的养老需求分层
女子找手机乘客干等3小时?东航回应:延误原因是天气及流量控制
职场第一课!大学生暑假涌向工厂流水线:有的目标是挣台iPad
呵护牙龈不含氟 国货品牌田七牙膏:6支到手29.9元 赠牙刷
适合招待客人的家常菜?
当年理科状元:余承东将出任母校霍邱二中鸿蒙班名誉班主任
AMD发布23.7.1 WHQL驱动:RX 7000显卡功耗过高bug终于修复了
张朝阳回应曾患焦虑症并已痊愈:靠心理学彻底治好 自己状态更好了
非常简易的还原分数方法
什么水平?巴黎新援李刚仁曾一条龙远射攻破皇马大门
我国一千年玻璃鸭是全球限量款:仅一件 用途成谜
《真人快打1》裂口女新造型倍受好评:极致恐怖獠牙
给AMD Zen5下马威!Intel 14代酷睿处理器整装待发:性能喜人
启辰发布最新产品计划 每年将推出至少2款新能源车型
湖北启动针对五峰县的省级地质灾害三级响应
美国加州一架飞机失事 现场一片狼藉:机上6名乘客遇难
世界第一! 上半年全国机动车达4.26亿辆 驾驶员超5亿
选读SQL经典实例笔记03_DML和元数据
新疆维吾尔自治区喀什市2023-06-26 01:25发布大风蓝色预警
内存SSD价格低谷已至!但先别贪便宜
健身房被淹教练只能抱出来蛋白粉:损失在100万左右
21年前硫酸泼熊清华大学生任职中科院引热议 专家:没必要看过去
中国工程院院士:我们算力超过时 GDP也可以超过美国了
拉脱维亚新总统宣誓就职
必看的节奏!《碟中谍7》口碑炸翻:阿汤哥从影42年来历史最佳
科技高管们太难了:借酒浇愁、吃药止痛
曝OLED版MacBook Pro生产难度太大:跳票了
Android架构组件LiveData
旅宋壹城壹旅礼品福卡商城,百业赋能专家!
固态价格暴跌:什么样的性价比最高?
国科大录取通知书含7颗大豆:组成“北斗七星”
多地冲40℃!南北高温区将连成一片直到下周 网友直呼热哭了
超级巨大的失误深圳门将摘球脱手,朴成笑纳大礼打空门进球
宝马电车没人买?半年卖出4.5万台:月均7500辆羡煞新势力
电影《长安三万里》上映:首日票房破亿
取代mini LED/LCD!iPad Pro拥抱OLED:明年初量产
痛苦了好几年,终于知道如何与孩子相处
摆钟论是哪位科学家的著作?摆钟的优点缺点和原理是什么?
非法请求是什么意思?非法请求怎么解决?
卡萨帝空调欲创新吉尼斯世界纪录:24小时除湿200斤水
先救女友情侣送完锦旗后订婚了 网友:祝百年好合
使出浑身解数是什么意思?使出浑身解数的近义词有哪些?
峨眉派的创始人是谁?峨眉派在哪个地方?
national是什么牌子的空调?national空调遥控器代码
【全网最细】mybatis-plus的java.lang.IllegalStateException: Failed to load ApplicationCo
售价5400元 宝马推出摩托车智能墨镜:50度高温也能用
电动车火灾频发!背后原因揭开
一瓶也包邮!海南春光一口鲜气椰汁大促:2斤9.9元速囤
ChatGPT被起诉索赔30亿!16人匿名状告OpenAI
阿迪达斯沐浴露650毫升到手25元:持久留香
银行卡盗窃一万元要判几年?银行卡盗窃罪量刑标准金额
酒店式公寓的中央空调是独立的吗?酒店式公寓的产权是多久?
重庆市如何收取房产税?重庆市房产税实施细则2023年
proe是什么软件?proe和creo的区别是什么?
php主要用于什么开发?php在云计算中的应用有哪些?
“他们好辛苦,娃娃很能干!”强降雨致山体滑坡 救援队翻山蹚水转移村民
小米继续推进降本增效:成立降本增效专项组 CFO林世伟挂帅