OpenCV轻松入门读书笔记(六)

a.把图片进行上下颠倒

import cv2
import numpy as np

if __name__ == '__main__':
    secen = cv2.imread("th.jfif")
    # 三位图片(高度,宽度,像素红绿蓝)
    # [::-1,:,:]把图片进行上下颠倒
    cv2.imshow("roase", secen[::-1, :, :])
    cv2.waitKey()
    cv2.destroyAllWindows()

添加图片注释,不超过 140 字(可选)

b.颠倒RGB像素顺序(变成BGR将大红变成大紫)

import cv2
import numpy as np

if __name__ == '__main__':
    secen = cv2.imread("th.jfif")
    # 三位图片(高度,宽度,像素红绿蓝)
    # [::-1,:,:]把图片进行上下颠倒
    cv2.imshow("roase", secen[:, :, ::-1])
    cv2.waitKey()
    cv2.destroyAllWindows()

c.将RGB变成RBG

import cv2
import numpy as np

if __name__ == '__main__':
    secen = cv2.imread("th.jfif")
    # 三位图片(高度,宽度,像素红绿蓝)
    # [::-1,:,:]把图片进行上下颠倒
    print(secen)
    cv2.imshow("roase", secen[:, :, [0, 2, 1]])
    cv2.waitKey()
    cv2.destroyAllWindows()

d.计算机视觉中一切图片都是数(三维数组)改变图片的尺寸

import cv2
import numpy as np

if __name__ == '__main__':
    secen = cv2.imread("th.jfif")
    secen2 = cv2.resize(secen, (300, 300))
    cv2.imshow("scen2", secen2)
    cv2.waitKey()
    cv2.destroyAllWindows()

e.将彩色图片变成黑白图片(灰度化处理)

import cv2
import numpy as np

if __name__ == '__main__':
    secen = cv2.imread("th.jfif")
    secen2 = cv2.resize(secen, (300, 300))
    gray = cv2.cvtColor(secen, code=cv2.COLOR_BGR2GRAY)
    cv2.imshow("gray", gray)
    cv2.waitKey()
    cv2.destroyAllWindows()

添加图片注释,不超过 140 字(可选)

转化成HSV

import cv2
import numpy as np

if __name__ == '__main__':
    secen = cv2.imread("th.jfif")
    secen2 = cv2.resize(secen, (300, 300))
    gray = cv2.cvtColor(secen, code=cv2.COLOR_BGR2GRAY)
    #把BGR转化为HSV
    HSV=cv2.cvtColor(secen,code=cv2.COLOR_BGR2HSV)
    cv2.imshow("HSV", HSV)
    cv2.waitKey()
    cv2.destroyAllWindows()

.

添加图片注释,不超过 140 字(可选)

f.H(色度)S(饱和度)V(亮度)

RGB多用于显示系统,但是图像处理一般使用HSV,他更加贴近人眼对于颜色的感知方式。

标记处图片中的蓝色

import cv2
import numpy as np

if __name__ == '__main__':
    img1 = cv2.imread("af055a9b7448d5139733ad7c3beb6b4.png")
    img2 = cv2.cvtColor(img1, code=cv2.COLOR_BGR2HSV)
    # 定义在HSV的空间中蓝色的范围
    lower_blue = np.array([110, 50, 50])
    up_blue = np.array([130, 255, 255])
    # 取得蓝色的范围,用来标记图片中的蓝色
    mask = cv2.inRange(img2, lower_blue, up_blue)
    rst = cv2.bitwise_and(img1, img1, mask=mask)
    print(mask)
    cv2.imshow("mask", mask)
    cv2.imshow("img2", img2)
    cv2.imshow("ret", rst)
    cv2.waitKey()
    cv2.destroyAllWindows()

g.将黑色背景板变为白色

    for i in range(rst.shape[0]):  # 图片的宽
        for j in range(rst.shape[1]):  # 图片的高
            if (rst[i, j] == 0).all():#都是0才是纯黑色
                rst[i, j] = 255

h.它们分别代表三角形的三条边长,判断这三条边是否能组成一个三角形,当判断为是时,你应该使用print语句输出Is a triangle,当判断为否时,则使用print语句输出Not a triangle


a = int(input())
b = int(input())
c = int(input())
if a+b>c and a+c>b and b+c>a:
    print("Is a triangle")
else:
    print("Not a triangle") 

i.while 循环

Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,从而处理需要重复处理的相同任务,直到不满足给定条件时,才会结束循环

中获取一个正整数n,并输出区间[1,n]内所有数的和

n=int(input())
s=0
for i in range(1,n+1):
    s+=i
print(s)

j.打印九九乘法表(Python 版)

for i in range(1, 10):
    for j in range(1, i+1):

        print(f"{j}*{i}={j*i}",end=" " if j<i else '\n')

continue

语法

循环控制语句改变执行的正常顺序。当执行离开一个作用域时,在该作用域中创建的所有自动对象将被销毁。

Python 支持 continue 控制语句:它将控制返回到循环的开始,或者说是可以结束某一次的循环直接跳到执行下一次的循环。

break

语法

Python break 语句,就像在C语言中,打破了最小封闭 for 或 while 循环。

break 语句用来终止循环语句,即循环条件没有 False 条件或者序列还没被完全递归完,也会停止执行循环语句。

break 语句用在 while 和 for 循环中。如果您使用嵌套循环,break 语句将停止执行最深层的循环,并开始执行下一行代码。

k.

import cv2

img1 = cv2.imread("th.jfif")
cv2.imshow("img1", img1)

print(cv2.__version__)
# 灰度化,图像的像素,图像坐标系向左为X,向下为Y,
# 分辨率:每个单位尺寸中,像素点的密度大小
# 灰度化主要的应用:OCR文本识别
img2 = cv2.cvtColor(img1, code=cv2.COLOR_BGR2GRAY)
cv2.imshow("gray", img2)
cv2.waitKey()
cv2.destroyAllWindows()

l.灰度化python版本

import cv2
import numpy as np

img1 = cv2.imread("th.jfif", 1)

imgInfo = img1.shape
height = imgInfo[0]
width = imgInfo[1]

dst = np.zeros((height, width, 3), dtype=np.uint8)
for i in range(0, height):
    for j in range(0, width):
        (b, g, r) = img1[i, j]
        # 变成整形的目的是为了防止溢出
        gray = (int(b) + int(g) + int(r)) / 3
        dst[i, j] = np.uint8(gray)

cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

       

m.图片马赛克

import cv2
import numpy as np

if __name__ == '__main__':
    img1 = cv2.imread("th.jfif")
    cv2.imshow("img1", img1)
    img2 = cv2.resize(img1, (25, 32))
    img3 = np.repeat(img2, 10, axis=0)
    img4 = np.repeat(img3, 10, axis=1)
    cv2.imshow("img4", img4)
    print(img1.shape)
    cv2.waitKey()
    cv2.destroyAllWindows()

.把细节放大十倍,丢失细节信息。

添加图片注释,不超过 140 字(可选)

repeat方式:重复方式把二维数据变成一维的,所以需要设定X(axis=0)和Y(axis=1)让他恢复到二维数组。

先把他缩小在放大,以达到马赛克的目的。

import cv2
import numpy as np

if __name__ == '__main__':
    img1 = cv2.imread("th.jfif")
    cv2.imshow("img1", img1)
    img2 = cv2.resize(img1, (25, 32))
    img3 = img2[::10, ::10]  # 每10个像素取一个
    cv2.namedWindow("img3", flags=cv2.WINDOW_NORMAL)
    cv2.resize("img3", 350, 232)
    cv2.imshow("img3", img3)
    print(img1.shape)
    cv2.waitKey()
    cv2.destroyAllWindows()

.另一种马赛克方式

import cv2
import numpy as np

if __name__ == '__main__':
    img1 = cv2.imread("50e5-iuvaazn5577948.jpg")
    img2 = cv2.resize(img1, (550, 500))
    face = img2[42:225, 139:400]
    face = face[::10, ::10]
    face = np.repeat(face, 10, axis=0)
    face = np.repeat(face, 10, axis=1)
    img2[42:225, 139:400] = face[:183, :261]
    cv2.imshow("face", face)
    cv2.waitKey()
    cv2.destroyAllWindows()

编辑

添加图片注释,不超过 140 字(可选)

以上都进行了进行了人为的定位,然后对图像进行了切片,最后进行有间隔的切片。

N.找到物体轮廓

根据颜色的差异来找到轮廓

import cv2
import numpy as np

if __name__ == '__main__':
    img = cv2.imread("12122643_184439305000_2.jpg")
    img1 = cv2.cvtColor(img, code=cv2.COLOR_BGR2HSV)  # 颜色空间,适用于计算
    lower_up = (156, 50, 50)
    up_red = (180, 255, 255)
    mask = cv2.inRange(img1, lowerb=lower_up, upperb=up_red)
    rst = cv2.bitwise_and(img1, img1, mask=mask)
    cv2.imshow("flower", rst)
    cv2.waitKey()
    cv2.destroyAllWindows()

编辑切换为居中

添加图片注释,不超过 140 字(可选)

o.输入正整数n,求1到n的交错和:即-1+2-3+4-5+6-7+...+((-1)^n)*n

sum=0
for i in range(1,n+1):
    if i%2==1:
        sum+=-i
    else:
        sum+=i
print(sum) 

p.输入正整数n,请你输出第一个平方大于n的整数。

for i in range(0,n):
    if i**2>n:
        print(i)
        break
    elif n==1:
        print(2)
        break

q.for 循环 - range step 语法

range 还支持循环的步长 step,做到类似 for(i=0; i<n; i+=step) 的效果比如要输出 0 到 n-1 范围内的所有偶数,我们可以写 range(0, n, 2)

l.for 循环 - enumerate 函数

在 Python,我们也可以使用 enumerate 来迭代序列中的元素的索引和元素值。

list = ["students", "for", "apples"]
for index, element in enumerate(list):
    print(index, element) 

s.值为下标的倍数的元素个数

res=0
for i,v in enumerate(arr):
    if i==0 and v==0:
        rse+=1
    elif i!=0 and v%i==0:
        res+=1
print(res)

t.输入一个正整数n,输出元素值不超过n的三元组中,能组成三角形的三条边边长的元组个数。

首先需要有一个变量count来记录能组成三角形三元组的个数。

其次构造三元组的全排列,依次判断该三元组是否能够组成三角形,如果能够组成,就令count+1。

最后输出count的值

count=0
for i in range(1,n+1):
    for j in range(1,n+1):
        for k in range(1,n+1):
            if i+j>k and i+k>j and j+k>i:
                count+=1
print(count)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值