Перейти к содержимому
Compvision.ru

Rino256

Пользователи
  • Количество публикаций

    3
  • Зарегистрирован

  • Посещение

Репутация

0 Новичек

О Rino256

  • Звание
    Новичок
  1. Обработка изображения

    Подправил код. #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <imgproc\imgproc.hpp> #include <imgproc\imgproc_c.h> int _tmain(int argc, _TCHAR* argv[]) { cv::Mat img= cv::imread("D:\\508.jpeg"); cv::imshow("Before",img); for(int i=1; i<img.rows-1; i++) for(int j=1; j<img.cols-1; j++) { img.at<uchar>(i,j)= img.at<uchar>(i+1,j)-img.at<uchar>(i,j); if(img.at<uchar>(i,j)<0) img.at<uchar>(i,j)*(-1); //img.at<uchar>(i,j)=127+0.5*img.at<uchar>(i,j); } cv::imshow("After",img); cvWaitKey(0); return 0; } ПРоблема в следующем: Картинка изменяется не вся, а только часть(картинка прилогается). Можете помочь, чтобы она изменялась вся полностью. И еще проблема: на левой и верхней границе картинки остаются пиксели из оригинальной фотографии. Цикл прохода по значениям пикселей делал ттаким образом for(int i=0; i<img.rows; i++) for(int j=0; j<img.cols; j++) { img.at<uchar>(i,j)= img.at<uchar>(i+1,j)-img.at<uchar>(i,j); if(img.at<uchar>(i,j)<0) img.at<uchar>(i,j)*(-1); } Но вылетала ошибка. Можете еще помочь справить этот баг. Заранее спасибо!
  2. Обработка изображения

    Здравствуйте! Проблема такая: есть картинка. Нужно к этой картинке применить метод конечных разностей 1-го порядка, применяя метод по диагональному направлению данной картинки. Не могу сообразить как это сделать по диагональному направлению. Вот мой пример кода, но скорее всего циклы заданы неверно. Доскажите пожалуйста как это правильно сделать. Заранее спасибо! #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <imgproc\imgproc.hpp> #include <imgproc\imgproc_c.h> int _tmain(int argc, _TCHAR* argv[]) { cv::Mat img= cv::imread("D:\\508.jpeg"); cv::imshow("Before",img); for(int i=1, j=1; i<img.rows-1, j<img.cols-1-i; i++, j++) //for(int j=1; j<img.cols-1; j++) { img.at<uchar>(i,j)= img.at<uchar>(i+1,j+1)-img.at<uchar>(i,j); if(img.at<uchar>(i,j)<0) { img.at<uchar>(i,j)=img.at<uchar>(i,j)*(-1); } } cv::imshow("After",img); cvWaitKey(0); return 0; }
  3. Здравствуйте! C OpenCv работаю недавно. Проблема такая: нужно получить значения крайнего ряда пикселей по X и Y. Пробовал использовать метод cvmGet и записывать результаты в массив типа double. Но компилятор пишет ошибку: expression must have a constant value. Размерность массива задается переменной c и r, которые я получаю таким образом: int c= img->width int r= img->height; В чем ошибка? И если я неправильно получаю значения пикселей, подскажите пожалуйста как это правильно сделать. Заранее спасибо за помощь! Вот полностью код: #include "stdafx.h" #include <opencv\highgui.h> #include <opencv\cxcore.h> #include <opencv2\core\core.hpp> #include <opencv2\core\core_c.h> #include <opencv2\imgproc\imgproc_c.h> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\calib3d\calib3d.hpp> int _tmain(int argc, _TCHAR* argv[]) { IplImage *img= cvLoadImage("C:\\Users\\Rino256\\Desktop\\face\\test.jpg"); int c= img->width; int r= img->height; cvNamedWindow("ex", CV_WINDOW_AUTOSIZE); double arr_x[c]; double arr_y[r]; cv::Mat mtx(img); CvMat mat= mtx; for(int i=0; i<img->width; i++){ arr_x[i]=cvmGet(&mat, 0, i ); } for(int i=0; i<img->height; i++) { arr_y[i]= cvmGet(&mat, i, 0); } cvWaitKey(0); cvReleaseImage(&img); cvDestroyWindow("ex"); return 0; }
×