opencv

1   画矩形(原图,左上角坐标,右下角坐标,画笔颜色,笔宽,画线类型)

cv2.rectangle(img, ptLeftTop, ptRightBottom, point_color, thickness, lineType)

import cv2

img = cv2.imread('C:\\Users\\Administrator\\Desktop\\3.jpg',0)

# 矩形左上角和右下角的坐标,绘制一个红色的矩形
ptLeftTop = (5, 5)  #(左上角x, 左上角y)
ptRightBottom = (470, 233) #(右下角x, 右下角y)
point_color = (255, 0 , 255)  # RGB框的颜色,自定
thickness = 1
lineType = 0
cv2.rectangle(img, ptLeftTop, ptRightBottom, point_color, thickness, lineType)

cv2.imwrite("C:\\Users\\Administrator\\Desktop\\new_result.jpg", img)  # 将画过矩形框的图片保存
img1 = cv2.imread('C:\\Users\\Administrator\\Desktop\\new_result.jpg',0)
cv2.imshow("new", img1)
cv2.waitKey(0)


2  createTrackbar   创建滚动条

createTrackbar() 这个函数用于创建一个可以调整数值的滑动条,并将滑动条附加到指定的窗口上。

该函数的参数有:createTrackbar(const String& trackbarname, const String& winname, int *value, int count, TrackbarCallback onChange = 0, void *userdata = 0),具体含义为:

trackbarname:跟踪栏名称,创建的轨迹栏的名称。
Winname:窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的窗口名。 
value:指向整数变量的可选指针,该变量的值反映滑块的初始位置。
count:表示滑块可以达到的最大位置的值,最小位置始终为0。
onChange:指向每次滑块更改位置时要调用的函数的指针,有默认值0。此函数的原型应为void XXX (int, void *); ,其中第一个参数是轨迹栏位置,第二个参数是用户数据(请参阅下一个参数)。如果回调是NULL指针,则不调用任何回调,而仅更新值。
userdata:传递给回调的用户数据,有默认值0。它可以用于处理轨迹栏事件,而无需使用全局变量。如果使用的第三个参数value实参是全局变量的话,完全可以不去管这个userdata参数。
对于 getTrackbarPos() 函数,它也需要多个参数:

第一个参数是Tarckbar 名称;
第二个参数是它附加到的窗口名称;
第三个参数是默认值;
第四个参数是最大值;
第五个是执行的回调函数每次跟踪栏值更改。回调函数始终具有默认参数,即轨迹栏位置。
 

import numpy as np
import cv2 as cv
def nothing(x):
    pass
# Create a black image, a window
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# create trackbars for color change
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# create switch for ON/OFF functionality
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image',0,1,nothing)
while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break
    # get current positions of four trackbars
    r = cv.getTrackbarPos('R','image')
    g = cv.getTrackbarPos('G','image')
    b = cv.getTrackbarPos('B','image')
    s = cv.getTrackbarPos(switch,'image')
    if s == 0:
        img[:] = 0
    else:
        img[:] = [b,g,r]
cv.destroyAllWindows()


3  numpy.zeros(np.zeros) 

zeros(shape, dtype=float, order='C')

  np.zeros((5,), dtype=np.int)
  array([0, 0, 0, 0, 0])
import cv2 as cv
import numpy as np
imgi = np.zeros((450, 500), np.uint8)
cv.namedWindow("tj")
cv.imshow("tj", imgi)
cv.waitKey(0)
cv.destroyAllWindows()


 4  getStructuringElement  

函数会返回指定形状和尺寸的结构元素。

Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));

矩形:MORPH_RECT;

交叉形:MORPH_CROSS;

椭圆形:MORPH_ELLIPSE;


5  cvtColor

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)   转灰度图

色调H

用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;

饱和度S

饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V

明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。


6  cv.inRange

        hsv = cv.cvtColor(src_frame, cv.COLOR_BGR2HSV)
        # 设置关注颜色的HSV,范围为0-360,s取值为0-1,v取值为0-255
        LH = cv.getTrackbarPos("LH", 'tj')
        LS = cv.getTrackbarPos("LS", 'tj')
        LV = cv.getTrackbarPos("LV", 'tj')
        HH = cv.getTrackbarPos("HH", 'tj')
        HS = cv.getTrackbarPos("HS", 'tj')
        HV = cv.getTrackbarPos("HV", 'tj')
        lower_red = np.array([LH, LS, LV])
        upper_red = np.array([HH, HS, HV])
        # inRange()方法返回的矩阵只包含0,255,(CV_8U) 0 表示不在区间内
        mask = cv.inRange(hsv, lower_red, upper_red)

void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)
注意:该函数输出的dst是一幅二值化之后的图像。

使用示例1:针对单通道图像
dst(I) = lowerb(I)0 ≤ src(I)0 < upperb(I)0
即,如果一幅灰度图像的某个像素的灰度值在指定的高、低阈值范围之内在dst图像中令该像素值为255,否则令其为0,这样就生成了一幅二值化的输出图像。

使用示例2:针对三通道图像
dst(I) = lowerb(I)0 ≤ src(I)0 < upperb(I)0 ∧ lowerb(I)1 ≤ src(I)1 < upperb(I)1 ∧lowerb(I)2 ≤ src(I)2 < upperb(I)2
即,每个通道的像素值都在规定的阈值范围内,则为255,否则为0
 


7  cv.bitwise_and   按位与

dst = cv.bitwise_and(src1,src2[,mask])

src1 与 src2 都是输入值,mask 是掩膜,任何数值与 0 进行按位与操作,都会得到 0,任何数值与 255 进行按位与操作,都会得到数值本身,上述数值都是 8 位无符号数字。 

import cv2 as cv
import numpy as np

gray_src = np.random.randint(0, 255, (7, 7), dtype=np.uint8)
black_src = np.zeros((7, 7), dtype=np.uint8)
black_src[3:7, 3:7] = 255

dst = cv.bitwise_and(gray_src, black_src)
print("gray_src")
print(gray_src)

print("black_src")
print(black_src)

print("dst")
print(dst)

 


FR:徐海涛(hunk Xu)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值