日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并

發(fā)布時(shí)間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基礎(chǔ)部分傳送門
python3+opencv學(xué)習(xí)筆記匯總目錄(適合基礎(chǔ)入門學(xué)習(xí))
進(jìn)階版筆記目錄:
python+opencv進(jìn)階版學(xué)習(xí)筆記目錄(適合有一定基礎(chǔ))

Numpy操作圖像

1.遍歷圖像每一個(gè)像素,并顏色取反

import cv2 as cv import numpy as npdef access_pixels(image):print(image.shape);height = image.shape[0]width = image.shape[1]channels = image.shape[2]print("width : %s, height : %s channels : %s"%(width, height, channels))for row in range(height):for col in range(width):for c in range(channels):pv = image[row, col, c]#遍歷每一個(gè)像素image[row, col, c] = 255 - pv#取反cv.imshow("pixels_demo", image)print("--------- Hello Python ---------") src = cv.imread("1.jpg") # blue, green red cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) #計(jì)時(shí)裝置 t1 = cv.getTickCount()# access_pixels(src) t2 = cv.getTickCount() time = (t2-t1)/cv.getTickFrequency(); print("time : %s ms"%(time*1000))# #計(jì)算結(jié)束 cv.waitKey(0) cv.destroyAllWindows()

OpenCV實(shí)現(xiàn)像素取反
cv2.bitwise_not(image)
bitwise:按位計(jì)算
not:取反
比numpy取反快幾十倍

def inverse(image):dst = cv.bitwise_not(image)cv.imshow("inverse demo", dst)

2.numpy創(chuàng)建圖
多通道圖

import cv2 as cv import numpy as npdef create_image():img = np.zeros([400, 400, 3], np.uint8)#創(chuàng)建一張全黑圖img[: , : , 0] = np.ones([400, 400])*255#修改第一個(gè)通道值img[:, :, 2] = np.ones([400, 400]) * 255#修改第三通道值cv.imshow("new image", img)#cv.imwrite('test.jpg',img)print("--------- Hello Python ---------")create_image() cv.waitKey(0) cv.destroyAllWindows()

單通道圖

import cv2 as cv import numpy as np def create_image():img=np.zeros([400,400,1],np.uint8)img[:,:,0]=np.ones([400, 400])*100cv.imshow("new image", img)#cv.imwrite('test.jpg',img) print("--------- Hello Python ---------")create_image() cv.waitKey(0) cv.destroyAllWindows()

色彩空間

HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV色彩空間(顏色模型)
色彩空間相互轉(zhuǎn)換
使用cv2.cvtColor()
HSV中:H[0-100],S[0-255],V[0-255]

import cv2 as cv import numpy as npdef color_space_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv.imshow("gray", gray)hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)cv.imshow("hsv", hsv)yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)cv.imshow("yuv", yuv)Ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)cv.imshow("ycrcb", Ycrcb)print("--------- Hello Python ---------") src = cv.imread("1.jpg") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) color_space_demo(src) cv.waitKey(0) cv.destroyAllWindows()

inRange查找顏色范圍

cv2.inRange(img,low,high)

HSV中:H[0-100],S[0-255],V[0-255]

1.先把圖像轉(zhuǎn)換成hsv中,根據(jù)表來查找具體顏色處于什么區(qū)間,設(shè)置區(qū)間。
2.結(jié)合cv2.inRange()可以清晰看到某個(gè)顏色區(qū)域圖像位于圖像的什么地方。
用法cv2.inRange(img,low,high),函數(shù)會(huì)將位于兩個(gè)區(qū)域間的值置為255,位于區(qū)間外的值置為0。比如想要看到青色的區(qū)域處于圖像中的什么位置。
如綠色的區(qū)域是
lower_red = np.array([35, 43, 46])
upper_red = np.array([77, 255, 255])

import numpy as npdef color_space_demo(image):hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#cv.imshow("hsv", hsv)lower_red = np.array([35, 43, 46])upper_red = np.array([77, 255, 255])mask = cv.inRange(hsv, lower_red, upper_red)cv.imshow('hsvred', mask)src = cv.imread("3.jpg")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) color_space_demo(src) cv.waitKey(0) cv.destroyAllWindows()

如如所示,綠色被很好的找出來啦。為右圖白色部分。

應(yīng)用場景:得到的是二值圖像,可以用于查找物體輪廓。

讓綠色顯示出來
dst = cv2.bitwise_and(image1, image2, mask=mask)

讓兩個(gè)圖像除去mask部分的圖像進(jìn)行與運(yùn)算。)

import cv2 as cv import numpy as npdef color_space_demo(image):hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#cv.imshow("hsv", hsv)lower_red = np.array([35, 43, 46])upper_red = np.array([77, 255, 255])mask = cv.inRange(hsv, lower_red, upper_red)dst = cv.bitwise_and(image, image, mask=mask)#除去mask部分的圖像進(jìn)行與運(yùn)算。得到綠色cv.imshow('hsvred', dst)src = cv.imread("3.jpg") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) color_space_demo(src) cv.waitKey(0) cv.destroyAllWindows()

通道分離與合并

通道分離
b, g, r = cv2.split(src)#分離

import cv2 src = cv2.imread("2.jpg") cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE) cv2.imshow("input image", src) b, g, r = cv2.split(src)#分離 cv2.imshow("blue", b) cv2.imshow("green", g) cv2.imshow("red", r) cv2.waitKey(0) cv2.destroyAllWindows()

>

通道合并
src = cv2.merge([b, g, r])

import cv2 src = cv2.imread("2.jpg") cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE) cv2.imshow("input image", src) b, g, r = cv2.split(src)#分離#通道合并 src = cv2.merge([b, g, r]) src[:, :, 0] = 0#對最后一個(gè)通道賦值0 cv2.imshow("changed image", src) cv2.waitKey(0) cv2.destroyAllWindows()

電氣專業(yè)的計(jì)算機(jī)小白,寫博文不容易。如果你覺得本文對你有用,請點(diǎn)個(gè)贊支持下。謝謝。

總結(jié)

以上是生活随笔為你收集整理的opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。