기본적으로 이미지를 흑백 이음매없는 이미지로 변환하는 게임을 만들려고 iOS 및 OpenCV로 놀고 있습니다. 영역이 있으며 화면의 한 번만 탭하여이 영역을 채울 수 있습니다. 지금까지 부분적으로 성공했습니다. 변환 작업은 정상적으로 작동하지만 구체적인 채색 가능 영역 (닫힌 영역)이있는 이미지를 만드는 데 어려움이 있습니다.OpenCV 및 iOS로 닫힌 영역을 만드는 동안 이미지를 색상으로 변환합니다.
심지어 가능합니까? 대체 방법/아이디어가 아니라면 무엇을 제안합니까? 나는 둘이 있지만 나는 좋아하지 않는다.
- 우리가
변환 후 그림으로 영역을 정의 - 탭을 화면에 단지 X 픽셀의 재귀 검색을 수행
예 : 이 Dropbox pics
가 어떤 건설적인 도움이 크게 감사합니다!
내 뷰 컨트롤러의 관련 부분 :
- (void)viewDidLoad{
[super viewDidLoad];
imageProcessor = [[Conversion alloc] init];
_image = [UIImage imageNamed:@"lenna"];
imageProcessor.thresholdSlider = self.thresholdSlider;
imageProcessor.thresholdSlider2 = self.thresholdSlider2;
self.imageView.image = [imageProcessor convertImage:_image];
}
- (IBAction)sliderChanged:(id)sender {
self.imageView.image = [imageProcessor convertImage:_image];
}
그리고 당신은이 단계를 수행 할 수 OpenCV의
- (UIImage*)convertImage:(UIImage*)image{
cv::Mat src;
cv::Mat src_gray;
//Convert UIImage to cv::Mat
src = [self cvMatFromUIImage:image];
if (!src.empty()) {
//Convert cv::Mat to grayscale
cv::cvtColor(src, src_gray, CV_RGBA2GRAY);
cv::blur(src_gray, src_gray, cv::Size(3,3));
cv::Mat canny_output;
cv::vector<cv::vector<cv::Point> > contours;
cv::vector<cv::Vec4i> hierarchy;
int thresh = (int)self.thresholdSlider.value;
int thresh2 = (int)self.thresholdSlider2.value;
NSLog(@"%d, %d", thresh, thresh2);
//Detect edges using canny
//http://en.wikipedia.org/wiki/Canny_edge_detector
cv::Canny(src_gray, canny_output, thresh, thresh2, 3, true);
//InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method,
//Point offset = Point())
cv::findContours(canny_output, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE, cv::Point(0,0));
cv::Scalar blackColor = cv::Scalar::all(0);
cv::Scalar whiteColor = cv::Scalar::all(255);
//create a WHITE Mat with the canny_output size
cv::Mat drawing(canny_output.size(), CV_8UC3, whiteColor);
for (size_t i = 0; i < contours.size(); i++) {
//InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar &color, int thickness = 1,
//int lineType = 8, InputArray hierarchy = noArray(), int maxLevel = 2147483647, Point offset = Point())
cv::drawContours(drawing, contours, int(i), blackColor, 1, CV_AA, hierarchy, INT_MAX, cv::Point());
}
return [self UIImageFromCVMat:drawing];
}
return nil;
}
고마워요! 나는 그것을 시도 할 것이고, 나는 그것을 대답으로 표시하거나 더 많이 물을 것이다. :) – farkasseb