훨씬 우수의 인터페이스 ++은 C를 사용하는 것을 고려 proc cvMat에서 UIImage로, 그 반대의 경우도 마찬가지입니다.
의견을 남겨주세요. 아마도 저와 같은 '횡설수설'연구를 발견했을 가능성이있는 사람들에게만 포함되었습니다. 모든 이미지에는 완전히 다른 설정이 필요합니다. 포기 하지마. houghcircles는 거기서 최고의 탐지 알고리즘에 관한 것입니다. 일부 게임 코드를 검색 기능과 결합하여 더 좋고, 더 간단하고, 빠릅니다.
#import "JmBViewController.h"
@interface JmBViewController()
@end
@implementation JmBViewController
- (void)viewDidLoad {
[super viewDidLoad];
_imgtest = [UIImage imageNamed:@"IMG_0424.PNG"];
cv::Mat cvImage;
UIImageToMat(_imgtest, cvImage);
if (!cvImage.empty()) {
cv::Mat gray;
// cv::Mat filteredMat;
cv::cvtColor(cvImage, gray, CV_BGRA2GRAY);
// cv::GaussianBlur(gray, gray, cv::Size(5, 5), 1.2, 1.2);
cv::vector<cv::Vec3f> circles;
//cv::HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, 50);
/*
for(size_t i = 0; i < circles.size(); i++)
{
cv::Point center((cvRound(circles[i][0]), cvRound(circles[i][1])));
int radius = cvRound(circles[i][2]);
cv::circle(gray, center, 3, cv::Scalar(0,255,0));
cv::circle(gray, center, radius, cv::Scalar(0,0,255));
}
*/
// for (int i = 1; i < 15; i = i + 2)
cv::GaussianBlur(gray, gray, cv::Size(9, 9), 1.5, 1.5);
cv::Mat edges;
cv::Canny(gray, edges, 0, 50);
//gray.setTo(cv::Scalar::all(0));
//gray.setTo(cv::Scalar::all(255), edges);
cv::HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, gray.rows/30, 100, 50, 10, 30);
for(size_t i = 0; i < circles.size(); i++)
{
cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
cv::circle(cvImage, center, 5, cv::Scalar::all(200), -1, 8, 0);//center
cv::circle(cvImage, center, radius, cv::Scalar::all(255), 3, 8, 0);//diamter
NSLog(@"Circles: %ld", i+1);
// cv::imshow(&"circles i " [ i], gray);
}
_imgView.image = MatToUIImage(cvImage);
}
/*
cv::Mat cvImage;
cv::Mat grey;
cv::Mat filteredMat;
cv::vector<cv::Vec3f> circles;
// cv::cvtColor(_imgtest, cvImage, CV_BGR2GRAY);
cv::threshold(grey, filteredMat, 100, 255, CV_THRESH_BINARY);
[UIImageCVMatConverter cvMatGrayFromUIImage:_imgtest];
// cv::cvtColor(cvImage, grey, CV_RGBA2GRAY);
// UIImageToMat(_imgtest, cvImage);
cv::HoughCircles(cvImage, circles, CV_HOUGH_GRADIENT, 1, 50);
// MatToUIImage(cvImage);
_imgView.image = [UIImageCVMatConverter UIImageFromCVMat:cvImage];
_imgView.image = MatToUIImage(cvImage);
*/
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
UIImage* MatToUIImage(const cv::Mat& image) {
NSData *data = [NSData dataWithBytes:image.data length:image.elemSize()*image.total()];
CGColorSpaceRef colorSpace;
if (image.elemSize() == 1) {
colorSpace = CGColorSpaceCreateDeviceGray();
}else { colorSpace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGImageRef imageRef = CGImageCreate(image.cols, image.rows, 8, 8*image.elemSize(), image.step.p[0], colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault, provider, NULL, FALSE, kCGRenderingIntentDefault);
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
return finalImage;
}
*/
@end
테스트에서 사용중인 이미지를 공유하면 많은 도움이됩니다. – karlphillip