Как преобразовать изображение OpenCV в оттенках серого в черно-белое? Я вижу аналогичный вопрос уже задан, но я использую OpenCV 2.3, и предлагаемое решение, похоже, больше не работает.
Я пытаюсь преобразовать изображение в градациях серого в черно-белое, чтобы все, что не совсем черное, было белым, и использовать это в качестве маски для surf.detect () , чтобы игнорировать ключевые точки, найденные на краю черной области маски.
Следующий Python получает меня почти там, но пороговое значение, отправленное в Threshold (), кажется, не имеет никакого эффекта. Если установить значение 0, 16, 128 или 255, результат будет одинаковым, при этом все пикселы со значением > 128 станут белыми, а все остальные - черными.
Что я делаю неправильно?
import cv, cv2
fn = 'myfile.jpg'
im_gray = cv2.imread(fn, cv.CV_LOAD_IMAGE_GRAYSCALE)
im_gray_mat = cv.fromarray(im_gray)
im_bw = cv.CreateImage(cv.GetSize(im_gray_mat), cv.IPL_DEPTH_8U, 1);
im_bw_mat = cv.GetMat(im_bw)
threshold = 0 # 128#255# HAS NO EFFECT!?!?
cv.Threshold(im_gray_mat, im_bw_mat, threshold, 255, cv.CV_THRESH_BINARY | cv.CV_THRESH_OTSU);
cv2.imshow('', np.asarray(im_bw_mat))
cv2.waitKey()
-121--663344-
Какой самый эффективный способ взять n наименьших чисел из последовательности,
[ [1 2 3] [9 2 1] [2 3 4] [5 6 7] ]
Я хотел бы взять 2 наименьших из последовательности на основе первого пункта,
[1 2 3] [2 3 4]
В настоящее время я сортирую весь список, а затем беру первые n предметов, но это, вероятно, не самый эффективный способ, это большой список, и мне нужно делать это часто.