Cet article vise principalement à clarifier les réglages détaillés des paramètres à valeur limitée lowerbarray et upperbarray.
L'article conclut enfin que les trois paramètres de la valeur limite sont les valeurs de [B, G, R] correspondant à la couleur.
Corps de fonction :
resultarray = cv2.inRange(src, lowerbarray, upperbarray[, dst] ) -> dst
1. Analyse des paramètres de fonction
Tableau d'images enregistré = nom de la fonction (image source, tableau de limite inférieure de couleur, tableau de limite supérieure de couleur [tableau de sortie (généralement non utilisé)])
L'image de sortie est une image binaire avec seulement deux couleurs : noir et blanc.
Documentation officielle
Hypothèse : la limite supérieure de couleur est de 180, la limite inférieure de couleur est de 50 et les couleurs de l'image sont de 40, 80, 200.
Couleur de l'image 40 < Limite inférieure de couleur 50 < Couleur de l'image 80 < Limite supérieure de couleur 180 < Couleur de l'image 200
Si la couleur de l'image passe de 40 à 0, elle sera noire. Si la couleur de l'image passe de 80 à 255, elle sera blanche. Si la couleur de l'image passe de 200 à 0, elle sera noire.
Les valeurs entre la limite inférieure de couleur et la limite supérieure de couleur sont modifiées à 255 et le reste est modifié à 0.
2. Vérification des codes
Utilisez d'abord l'outil de dessin pour créer une nouvelle image RVB monochrome rouge R:254, G:0, B:0
Le code est
import numpy as np #导入numpy创建数组
import cv2 #导入OPENCV
img = cv2.imread('2.bmp') #读取图片
print(img) #打印图片数组
low1 = np.array([0, 0, 0]) #设置第一组对比数组下限
low2 = np.array([0, 0, 0]) #设置第二组对比数组下限
up1 = np.array([0, 0, 255]) #设置第一组对比数组上限
up2 = np.array([0, 0, 254]) #设置第二组对比数组上限
img2 = cv2.inRange(img, low1, up1) #生成第一张对比图片
img3 = cv2.inRange(img, low2, up2) #生成第二张对比图片
cv2.imshow("img", img) #显示原图
cv2.imshow("img2", img2) #显示第一张对比图片
cv2.imshow("img3", img3) #显示第二张对比图片
cv2.waitKey(0) #图片显示等待
Le mode couleur de l'image importée par CV2 est BGR, donc la limite supérieure de couleur est définie ici sur B:0 G:0 R:255/254.
(L'image ici analyse le mode BGR, non converti en mode HSV)
Ensuite, nous exécutons le code pour afficher l'image générée
Le tableau BGR de l’image originale est
Générer un tableau de comparaison
Image originale monochrome B:0G:0R:254 |
La limite inférieure du premier groupe de couleurs est : B:0 G:0 R:0 La limite supérieure du premier groupe de couleurs est : B:0 G:0 R:255 Limite inférieure : 0 < Couleur de l'image : 254 < Limite supérieure : 255 La couleur de l'image se situe dans une plage limitée Réglez la couleur de l'image sur 255 (blanc) inRange convertit les images en valeurs binaires (uniquement les couleurs noir et blanc) |
La limite inférieure du deuxième groupe de couleurs est : B:0 G:0 R:0 La limite supérieure du deuxième groupe de couleurs est : B:0 G:0 R:254 Limite inférieure : 0 < Limite supérieure : 254 <= Couleur de l'image : 254 La couleur de l'image n'est pas dans la plage limitée Réglez la couleur de l'image sur 0 (noir) inRange convertit les images en valeurs binaires (uniquement les couleurs noir et blanc) |
Modifiez ensuite l'image en un mélange de deux couleurs et une image en couleur unie R:253 G:252 B:0
Comparez d'abord avec le code d'origine
Nouvelle gamme de couleurs BGR
Nouveau tableau de comparaison des couleurs
On peut voir que la valeur limite de couleur BGR doit être respectée en même temps avant que la valeur de couleur de l'image originale ne soit modifiée à 255 (blanc).
Ci-dessous le code pour modifier la valeur limite
import numpy as np #导入numpy创建数组
import cv2 #导入OPENCV
img = cv2.imread('2.bmp') #读取图片
print(img) #打印图片数组
low1 = np.array([0, 0, 0]) #设置第一组对比数组下限
low2 = np.array([0, 0, 0]) #设置第二组对比数组下限
up1 = np.array([0, 251, 253]) #设置第一组对比数组上限 这里修改B:0 G:251 R:253
up2 = np.array([0, 252, 253]) #设置第二组对比数组上限 这里修改B:0 G:252 R:253
img2 = cv2.inRange(img, low1, up1) #生成第一张对比图片
img3 = cv2.inRange(img, low2, up2) #生成第二张对比图片
cv2.imshow("img", img) #显示原图
cv2.imshow("img2", img2) #显示第一张对比图片
cv2.imshow("img3", img3) #显示第二张对比图片
cv2.waitKey(0) #图片显示等待
La valeur de couleur sera modifiée à 255 (blanc) uniquement lorsque la valeur limite sera modifiée et que la valeur limite BGR sera atteinte en même temps.
Nouvelle image originale de valeur de couleur B:0 G:252 R:253 |
La limite inférieure du premier groupe de couleurs est : B:0 G:0 R:0 La limite supérieure du premier groupe de couleurs est : B:0 G:251 R:253 R limite inférieure : 0<couleur de l'image : 253 <=limite supérieure : 253 Limite inférieure G : 0<limite supérieure : 253<couleur de l'image : 252 Ne répond pas aux deux restrictions de couleur La couleur de l'image est dans une plage illimitée Réglez la couleur de l'image sur 0 (noir) |
La limite inférieure du deuxième groupe de couleurs est : B:0 G:0 R:0 La limite supérieure du deuxième groupe de couleurs est : B:0 G:252 R:253 R limite inférieure : 0 < couleur de l'image : 253 <= limite supérieure : 253 G limite inférieure : 0<couleur de l'image : 252<=limite supérieure : 252 Respectez les deux restrictions de couleur La couleur de l'image se situe dans une plage limitée Réglez la couleur de l'image sur 255 (blanc) |
Ici, l'analyse simple des limitations de couleurs est terminée
Créez une nouvelle image de couleurs mélangées et sélectionnez la couleur souhaitée
La valeur de couleur jaune que vous souhaitez extraire est B:0 G:242 R:254 et la valeur limite est définie sur : B:0-255 G:178-243 R:36-254.
La valeur limitée du bleu B est de 0 à 255, car la valeur de B est le paramètre clair et foncé du jaune, foncé 0<----B---->255 clair
code affiché comme ci-dessous
import numpy as np #导入numpy创建数组
import cv2 #导入OPENCV
img = cv2.imread('2.bmp') #读取图片
print(img) #打印图片数组
low1 = np.array([0, 178, 36]) #设置颜色BGR下限
up1 = np.array([255, 243, 254]) #设置颜色BGR上限
img2 = cv2.inRange(img, low1, up1) #生成截取图片
cv2.imshow("img", img) #显示原图
cv2.imshow("img2", img2) #显示截取图片
cv2.waitKey(0) #图片显示等待
Générer des captures d'écran
L'image montre qu'une image très approximative a été prise car la valeur limite a été réglée trop précisément.
import numpy as np #导入numpy创建数组
import cv2 #导入OPENCV
img = cv2.imread('2.bmp') #读取图片
print(img) #打印图片数组
low1 = np.array([0, 178, 36]) #设置颜色BGR下限
up1 = np.array([65, 255, 255]) #设置颜色BGR上限 修改B:65 G:255 R:255
img2 = cv2.inRange(img, low1, up1) #生成截取图片
cv2.imshow("img", img) #显示原图
cv2.imshow("img2", img2) #显示截取图片
cv2.waitKey(0) #图片显示等待
Générer des images après modification
C'est mieux, vous pouvez modifier la valeur limite en fonction de vos propres besoins.
Cet article vise principalement à clarifier les paramètres détaillés des paramètres à valeur limitée lowerarray et upperarray.