外贸网站如何做推广是什么,wordpress更换初始域名,兰州压热搜,新乡做新网站目录 1.文章内容来源
2.图像的进阶操作 2.1.边界填充 2.2.数值计算 2.3.图像融合 2.4.图像保存 2.5.视频读取
3.课后习题代码复现 3.1.问题一图像像素颜色 3.2.问题二图片黑客帝国化 3.3.问题三梅西的足球轨迹
4.易错点总结与反思 1.文章内容来源
1.题目来源:https://edu.c…目录 1.文章内容来源
2.图像的进阶操作 2.1.边界填充 2.2.数值计算 2.3.图像融合 2.4.图像保存 2.5.视频读取
3.课后习题代码复现 3.1.问题一图像像素颜色 3.2.问题二图片黑客帝国化 3.3.问题三梅西的足球轨迹
4.易错点总结与反思 1.文章内容来源
1.题目来源:https://edu.csdn.net/skill/opencv/opencv-819f137c35c64f76945bcd7e60d37807?category657typeId20811
2.资料来源:https://edu.csdn.net/skill/opencv/opencv-819f137c35c64f76945bcd7e60d37807?category657typeId20810#___442.图像的进阶操作 2.1.边界填充
常见的边界填充的方法有如下5种:
BORDER_REPLICATE 复制法也就是复制最边缘像素
BORDER_REFLECT 反射法对感兴趣的图像中的像素在两边进行复制例如fedcb|ajabcdefghjhg|fedcb
BORDER_REFLECT_101 反射法也就是以最边缘像素为轴、对称、gfedcb|jabcdefghi|gfedcba
BORDER_WRAP 外包装法 abcdefgh|abcdefgh|abcdefgh
BORDER_CONSTANT 常量法常数值填充,填充一个常数value(效果不好)
#%%
import cv2
import matplotlib.pyplot as plt
img cv2.imread(rcv.jpg)
top_size,buttom_size,left_size,right_size (50,50,50,50)# 定义图片显示大小# 复制法也就是复制最边缘像素
replicate cv2.copyMakeBorder(img,top_size,buttom_size,left_size,right_size,borderTypecv2.BORDER_REPLICATE)# 反射法对感兴趣的图像中的像素在两边进行复制例如fedcb|ajabcdefghjhg|fedcb
reflect cv2.copyMakeBorder(img,top_size,buttom_size,left_size,right_size,borderTypecv2.BORDER_REFLECT)# 反射法也就是以最边缘像素为轴、对称、gfedcb|jabcdefghi|gfedcba
reflect01 cv2.copyMakeBorder(img,top_size,buttom_size,left_size,right_size,borderTypecv2.BORDER_REFLECT_101)# 外包装法 abcdefgh|abcdefgh|abcdefgh
wrap cv2.copyMakeBorder(img,top_size,buttom_size,left_size,right_size,borderTypecv2.BORDER_WRAP)# 常量法常数值填充,填充一个常数value(效果不好)
constant cv2.copyMakeBorder(img,top_size,buttom_size,left_size,right_size,borderTypecv2.BORDER_CONSTANT)
#绘制效果图
figure[img,replicate,reflect,reflect01,wrap,constant]
title[uORIGINAL,uREPLICATE,uREFLECT,uREPLICATE01,uWRAP,uCONSTANT]
for i in range(6):plt.subplot(2,3,i1)plt.imshow(figure[i],gray)plt.title(title[i]),plt.xticks([]),plt.yticks([])
plt.show() 2.2.数值计算
数值计算方法与原则:
图片的灰度值范围为0-255,如果超出范围就会作溢出计算。
example:如果一个灰度值为254的像素点,做加法运算10,则表示为25410264255;此时该点的像素值为264-2559import cv2
img cv2.imread(rcv.jpg)
img2 img 100
img[:5,:,0]
print(img)
print(*******************************)
print(img2) 2.3.图像融合
图像融合:1.图像融合要求我们两张图片的H和W必须是一样的。2.我们首先获取第一张图片的大小。3.我们然后用resize()函数来修改第二张图片大小与第一张图片相同。4.这里注意img.shape()返回的是(H,W),resize()需要输入的是(W,H)5.最后再用addWeighted()函数融合获得图片即可
#%%
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
img cv.imread(rcv.jpg)
print(img.shape)#打印出来的是(1748,2400)
img_cat cv.imread(rdata_data.jpg)
img_cat cv.resize(img_cat,(2400,1748))#设置与 img 一样的数值
res cv.addWeighted(img,0.4,img_cat,0.6,0)
plt.imshow(res)
plt.xticks([]),plt.yticks([])
plt.show() 2.4.图像保存
#%%图像的保存非常简单只需要使用 imwrite() 方法即可将图像保存起来
千万注意最好别加中文import cv2
img cv.imread(./cv.jpg,cv.IMREAD_GRAYSCALE)# 读取图像
# 图像保存
cv.imwrite(./cv_demo.jpg,img)# 第一个参数是图像要保存的路径第二个图像是要保存的图像 2.5.视频读取
#%%
import cv2
video cv2.VideoCapture(rlihuatian.mp4)
# 检查是否打开正确
if video.isOpened():# 我们都知道视频和游戏其实都是由图像组成的通过访问图像的帧数连贯形成的这里也是一样# video.read() 一帧一帧地读取# open 得到的是一个布尔值就是 True 或者 False# frame 得到当前这一帧的图像open, frame video.read()
else:open False#如果打开正确的话进行每帧的遍历
while open:ret, frame video.read()# 如果读到的帧数不为空那么就继续读取如果为空就退出if frame is None:breakif ret True:# 转换为灰度图#gray cv2.cvtColor(frame, cv2.COLOR_UNCHANGED)cv2.imshow(video,frame)# 这里使用 waitKey 可以控制视频的播放速度数值越小播放速度越快# 这里等于 27 也即是说按下 ESC 键即可退出该窗口if cv2.waitKey(10) 0xFF 27:break
video.release()
cv2.destroyAllWindows() 3.课后习题代码复现 3.1.问题一图像像素颜色
#%%认识颜色空间,OpenCV 常用的颜色空间有RGB颜色空间、HSV颜色空间、Lab颜色空间。
以下选项中不正确打印像素(100,100)处颜色空间分量名字的是#OPENCV中默认的颜色通道是BRG
import numpy as np
import cv2 as cv
if __name__ __main__:img cv.imread(lena.png, cv.IMREAD_COLOR)px img[100, 100]print(fblue:{px[0]}, green:{px[0]}, red:{px[0]})
3.2.问题二图片黑客帝国化
颜色操作方法:
Method 1.数据img[i,j]上直接进行操作
Method 2.b,g,r img.item((i, j, 0)),img.item((i, j, 1)), img.item((i, j, 2))必须分别指明bgr
#%%import numpy as np
import cv2
import mathdef hacker(img):height, width, channels img.shapefor i in range(0, width):for j in range(0, height):b, g, r img[i, j]hack_b int(math.pow(b/256.0, 3/2) * 256)hack_g int(math.pow(g/256.0, 4/5) * 256)hack_r int(math.pow(r/256.0, 3/2) * 256)img[i, j] (hack_b, hack_g, hack_r)if __name__ __main__:img_origin cv2.imread(lena.png, cv2.IMREAD_COLOR)img cv2.imread(lena.png, cv2.IMREAD_COLOR)print(img.size)print(img.shape)hacker(img)print(显示图片请按任意键退出)numpy_horizontal_concat np.concatenate((img_origin, img), axis1)cv2.imshow(Lena图片黑客帝国化, numpy_horizontal_concat)cv2.waitKey()cv2.destroyAllWindows() 3.3.问题三梅西的足球轨迹 1.首先我们需要知道这个图片的轴是在哪图片的轴是在以左上角为轴向下做y轴正方向向右边做x轴正方向2.所以messi的球的轨迹还原是y减小x增大的路径的。3.我们描述的适合都是习惯(x,y),但在cv很多方面都是使用(y,x)坐标。import cv2
import numpy as npif __name__ __main__:img cv2.imread(ball.jpg, cv2.IMREAD_COLOR)start [493, 594]end [112, 213]ball img[start[0]:start[1], end[0]:end[1]]x_step 101y_step 10for i in range(-1, 4):# TODO(You): 请在此实现代码x_offset x_step*iy_offset y_step*iimg[start[0]-y_offset:start[1]-y_offset, end[0]x_offset:end[1]x_offset] ballcv2.imshow(ball_continue, img)cv2.waitKey(0)cv2.destroyAllWindows()
4.易错点总结与反思
1.边界填充的方法有很多种,最好别用恒值填充。
2.灰度值计算具有溢出原则超过255就又从0开始计算了。
3.图像保存用imwrite(),路径最好不要用中文。
4.OPENCV中默认的颜色通道是BGR。
5.用item()函数操作颜色的时候一定要指明是BGR。
6.图片的坐标轴是从左上方为原点向下为y轴正半轴向右为x轴正半轴。