0
나는 인터넷에서 opencv 2.x java 코드 예제를 찾을 수 있습니다. 나는 opencv 3.2를 사용하여 이미지를로드하고 x amout보다 긴 모든 검정색 선을 흰색으로 바꾼다. 여기가 무릎의 OpenCV의 2.4 버전 변형 예로 시작에서 어디에 있어요이미지 처리 opencv 3.0 어설 션 실패 오류
Mat img = Imgcodecs.imread("C:/Users/user1/Desktop/topdown-6.jpg");
// Mat img = Imgcodecs.imread(fileName)
// generate gray scale and blur
Mat gray = new Mat();
Imgproc.cvtColor(img, gray, Imgproc.COLOR_BGR2GRAY);
Imgproc.blur(gray, gray, new Size(3, 3));
// detect the edges
Mat edges = new Mat();
int lowThreshold = 50;
int ratio = 3;
Imgproc.Canny(gray, edges, lowThreshold, lowThreshold * ratio);
Mat lines = new Mat();
Imgproc.HoughLinesP(edges, lines, 1, Math.PI/180, 50, 50, 10);
for(int i = 0; i < lines.cols(); i++) {
double[] val = lines.get(0, i);
Imgproc.line(img, new Point(val[0], val[1]), new Point(val[2], val[3]), new Scalar(0, 0, 255), 2);
}
Image edgesImg = toBufferedImage(edges);
Image linesImg = toBufferedImage(lines);
Image imgg = toBufferedImage(img);
... 내가 오류를
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file
C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\imgproc\src\color.cpp, line 9748
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\imgproc\src\color.cpp:9748: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor
]
at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method)
at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:1778)
at Main.main(Main.java:174)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
내 목표는 것으로 어떤 도움을 받고 있어요 굉장해. 그냥 opencv 버전 2.x를 사용해야합니까?
편집 :
public Image toBufferedImage(Mat m){
int type = BufferedImage.TYPE_BYTE_GRAY;
if (m.channels() > 1) {
type = BufferedImage.TYPE_3BYTE_BGR;
}
int bufferSize = m.channels()*m.cols()*m.rows();
byte [] b = new byte[bufferSize];
m.get(0,0,b); // ERROR HAPPENING HERE
BufferedImage image = new BufferedImage(m.cols(),m.rows(), type);
final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
System.arraycopy(b, 0, targetPixels, 0, b.length);
return image;
}
제거 된 매개 변수. 동일한 오류 – Boutin
매개 변수를 그대로두고 cvtColor 행을 제거하면 어떻게됩니까? (또한 입력으로 img를 사용하여 흐리게 변경) – brad
나는 그것을 작동 시켰어. 해결책은 Imgcodecs.IMREAD_COLOR 매개 변수를 만드는 것이 었습니다. 이제 매트를 버퍼링 된 이미지로 변환하는 코드에서 "매트 데이터 유형이 호환되지 않습니다 : 28"오류가 발생합니다. toBufferedImage (mat)에 대한 편집되고 게시 된 코드; – Boutin