2016-01-06 3 views
0

enter image description hereЕсть ли способ изменить пиксель изображения 2?

enter image description here JPG

Я хочу проверить 2-е изображение, чтобы увидеть, если пиксель белый, если это белый я должен изменить его в черный пиксель, а также я должен быть в состоянии изменить пиксель одного и того же пятна на втором изображении до 1-го изображения до черного или белого. Пример: img at cooridnate (100,100) пиксель белый от второго изображения, и я должен иметь возможность изменить его на черный. Тогда первый img в том же cooridnate (100 100) пиксель будет черным, и я должен будет изменить его на белый. для уменьшения шума.

+0

Какой второй образ? Я вижу только один. –

+0

второе изображение является одним цветом – Jon

ответ

0

В приведенном ниже коде показано, как найти точку на изображении, посмотреть, будет ли она белой, и изменить ее на черный, если она есть.

Scalar colourInSecondImage = img2.at<uchar>(y,x); 

if(colourInSecondImage .val[0]==255 && colourInSecondImage .val[1]==255 && colourInSecondImage .val[2]==255) 
{ 
    // Then your point is a white point 
    img2.at<uchar>(y,x) = Scalar(0,0,0); 
} 

Я немного запутался ваш вопрос, это, кажется, что вы тогда хотите получить доступ к той же точке в другом изображении и установить, что черный? Или такой же цвет? в любом случае вы будете использовать тот же метод, что и в приведенном выше коде. изменить изменение im2 к img1

+0

для (INT у = 0;. У (у, х); \t \t \t, если (colourInSecondImage.val [0] == 255 && colourInSecondImage.val [1] == 255 && colourInSecondImage.val [2] == 255) \t \t \t { \t \t \t \t // Тогда ваша точка - белая точка \t \t \t \t cdst.при (y, x) = Скаляр (0, 0, 0); \t \t \t} \t \t} \t} , но есть ошибка – Jon

+0

У меня этот код недействительным (разл) { \t Vec3f красный (0, 0, 255); \t Vec3f синий (255, 0, 0); \t Vec3f green (0, 128, 0); \t Vec3f желтый (0, 255, 255); \t Vec3f marron (0, 0,128); \t Vec3f розовый (147, 20, 255); \t Vec3f индиго (130, 0, 75); \t Vec3f midblue (112, 25, 25); \t Vec3f magenta (139, 0, 139); \t cdst; \t для (INT I = 0; г (y, x); \t} } – Jon

+0

поэтому я хочу получить значения каждого канала из изображения – Jon

0

Это, как вы можете перебрать все ваши пиксельных значений и манипулировать им

for(int r = 0; r < image.rows; r++) { 
     for(int c = 0; c < image.cols; c++) { 
      // if pixel is white 
      if(image.at<uchar>(r,c) == 255) { 
       image.at<uchar>(r,c) = 0; 
      } 
     } 
} 

//// разделения каналов

split(image,spl); 
imshow("spl1",spl[0]);//b 
imshow("spl2",spl[1]);//g 
imshow("spl3",spl[2]);//r 
+0

Могу ли я спросить, как я могу знать, что конкретный пиксель имеет цвет или красный цвет в 3-х каналах в BGR. – Jon

+0

пример: img.at (100,100), чтобы увидеть, какие цвета в 3-х каналов – Jon

+0

При использовании цветных изображений необходимо сначала разделить каналы, а затем посмотреть на каждый indivudual: Я добавил код ответа После расщепления только петля через красный канал: spl (2) .rows и т. Д. – Michael

Смежные вопросы