Что нового

PixelSearch и shade-variation непонятные моменты

running-frag

why me?
Сообщения
441
Репутация
60
помогите понять, по какому прицепу PixelSearch ищет учитывая атрибут шэйда

допустим мы ищем

Код:
PixelSearch (0,0, 100,100, 0xFFFFFF, 50)


какой диапазон цветов захватит функция, к сожалению в хелпе как то это всё непонятно
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,321
running-frag,
Запускаете этот скрипт:
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

$iStep = 0x050505
$iStart = 0xFFFFFF

GUICreate('Test Color', 200, 290)
For $i = 0 To 10
	GUICtrlCreateLabel('0x' & Hex($iStart, 6), 5, 10 + 25 * $i, 190, 20, $SS_RIGHT)
	GUICtrlSetBkColor(-1, $iStart)
	$iStart -= $iStep
Next
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Обрабатываете окно этим:
Код:
Opt('PixelCoordMode', 2)
Opt('MouseCoordMode', 2)

$hWin = WinGetHandle('Test Color')
WinActivate($hWin)
For $j = 25 To 0 Step -5
	For $i = 20 To 270 Step 25
		ConsoleWrite('shade-variation: ' & $j & @LF)
		$aPos = PixelSearch(10, $i, 20, $i + 5, 0xE6E6E6, $j, 1, $hWin)
		If @error Then
			ConsoleWrite('Error' & @LF)
		Else
			ConsoleWrite('0x' & Hex(PixelGetColor($aPos[0], $aPos[1], $hWin), 6) & @LF)
			MouseMove($aPos[0], $aPos[1])
		EndIf
		Sleep(200)
	Next
Next
И смотрите, что он в консоли пишет.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
попробывал, выдаёт такие вещи но....

Код:
shade-variation: 25
0xFFFFFF
shade-variation: 25
0xFAFAFA
shade-variation: 25
0xF5F5F5
shade-variation: 25
0xF0F0F0
shade-variation: 25
0xEBEBEB
shade-variation: 25
0xE6E6E6
shade-variation: 25
0xE1E1E1
shade-variation: 25
0xDCDCDC
shade-variation: 25
0xD7D7D7
shade-variation: 25
0xD2D2D2
shade-variation: 25
0xCDCDCD
shade-variation: 20
Error
shade-variation: 20
0xFAFAFA
shade-variation: 20
0xF5F5F5
shade-variation: 20
0xF0F0F0
shade-variation: 20
0xEBEBEB
shade-variation: 20
0xE6E6E6
shade-variation: 20
0xE1E1E1
shade-variation: 20
0xDCDCDC
shade-variation: 20
0xD7D7D7
shade-variation: 20
0xD2D2D2
shade-variation: 20
Error
shade-variation: 15
Error
shade-variation: 15
Error
shade-variation: 15
0xF5F5F5
shade-variation: 15
0xF0F0F0
shade-variation: 15
0xEBEBEB
shade-variation: 15
0xE6E6E6
shade-variation: 15
0xE1E1E1
shade-variation: 15
0xDCDCDC
shade-variation: 15
0xD7D7D7
shade-variation: 15
Error
shade-variation: 15
Error
shade-variation: 10
Error
shade-variation: 10
Error
shade-variation: 10
Error
shade-variation: 10
0xF0F0F0
shade-variation: 10
0xEBEBEB
shade-variation: 10
0xE6E6E6
shade-variation: 10
0xE1E1E1
shade-variation: 10
0xDCDCDC
shade-variation: 10
Error
shade-variation: 10
Error
shade-variation: 10
Error
shade-variation: 5
Error
shade-variation: 5
Error
shade-variation: 5
Error
shade-variation: 5
Error
shade-variation: 5
0xEBEBEB
shade-variation: 5
0xE6E6E6
shade-variation: 5
0xE1E1E1

... но я всё равно не понял
shade-variation это проценты или это как считается

почему интересуюсь, допустим есть белый цвет, по сути всё что не есть точно чёрным (0x000000) это вариация белого, логично? там ведь присутсвует белый цвет? если я не ошибаюсь то да, и это ещё с простым примером в виде чёрный vs белый, а если там красный, синий....


Добавлено:
Сообщение автоматически объединено:

и ещё, отсчёт идёт только в "тёмную" сторону? т.е. по сути это идёт простое "затемнение" цвета - правильно понял? (затемнение относительно того пикселя что мы задаём и не более того значения что задано в shade-variation)
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Это разница, обычная разница между искомым цветом и тем что есть. Типа А минус Б. Только не уверен, shade - это допуск по каждому каналу или по сумме их.

Разница между FF и FE равна 1.
 

alexisnoy123

Новичок
Сообщения
9
Репутация
2
Я когда еще AutoIt-ом пользовался понял так, что допуск +- по любому каналу независимо (т.е. 0x050505 с shade=3 получится от 0x020202 до 0x080808 . кангалы друг от друга не зависят, т.е. это можкт быть и 0x020808 и 0x020305 и т.п.). Реализовал у себя именно так.
Вот кусок мой реализации.
Код:
def pixelsearch(self,box,rgbh,xy=0,all=0,numbers=False):
        rgb= (rgbh[0]>>16)&0xff, (rgbh[0]>>8)&0xff, rgbh[0]&0xff # переделаем HEX в LIST
        shape=rgbh[1]
        abs1=abs
        sh1=cv2.cv.CreateMat(self.img.rows,self.img.cols, cv2.CV_8UC3)
        cv2.cv.Copy(self.img,sh1)
        sh=cv2.cv.GetSubRect(sh1,(box[0],box[1],box[2],box[3]))

        w1= sh.cols
        h1= sh.rows

        found = 0
        for x in range(w1):
            for y in range(h1):
                w=sh[y,x] 
                if numbers==False:
                    if abs1(w[2]-rgb[0])<=shape:
                        if abs1(w[1]-rgb[1])<=shape:
                            if abs1(w[0]-rgb[2])<=shape:
                                out=out+[(x+box[0],y+box[1])]
(какая то старая версия. в новой дополнительного "мусора" ещё больше)
sh - массив данных о пикселях картинки
w1, h1 - столбцы, строки для перебора
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
SirMaksFromEho [?]
Это разница, обычная разница между искомым цветом и тем что есть. Типа А минус Б. Только не уверен, shade - это допуск по каждому каналу или по сумме их.
судя по тестам хочется верить что по каждому

насколько я понял всё решается методом научного, находим пиксель, задаём цвет и начинаем играться с шэйдом что б понять "насколько глубоко мы можем углубляться"

ну вроде бы с этим разкурился немного
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
возобновляю тему, теперь вопрос поитересней
как от обратного получиться shade-variation? т.е. у нас есть пиксель и мы хотим узнать его оригинальный (ну или ближайший) цвет и его shade ?
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
как я понял - шейд это вариант цвета при добавлении черного, т.е. затемнение или осветление.
"Shades - adding black to a pure hue" а вот как это с математической точки зрения - надо подумать.
 
Верх