【发布时间】:2018-01-02 10:13:44
【问题描述】:
我正在尝试从红色圆圈内部获取颜色并更改位于左上角的大圆圈的颜色,如 screen shot 所示。并且从屏幕截图中可以看出,大圆圈的颜色与红色圆圈中的颜色不一样,它的颜色从红色圆圈稍微偏左一点。我给出了相同的坐标,如何解决?
这是我的代码。
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2, View.OnTouchListener {
private CameraBridgeViewBase cameraManager;
private BaseLoaderCallback callBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
cameraManager.enableView();
}
};
Mat mRgba;
double[] renk;
int r,g,b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(!OpenCVLoader.initDebug()){
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, this, callBack);
}
cameraManager = (CameraBridgeViewBase)findViewById(R.id.kamera);
cameraManager.setVisibility(View.VISIBLE);
cameraManager.setCvCameraViewListener(this);
cameraManager.setCameraIndex(0);
}
@Override
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat(width, height, CvType.CV_8UC4);
}
@Override
public void onCameraViewStopped() {
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
renk = mRgba.get(mRgba.width()/2, (mRgba.height()/10)*8);
Imgproc.circle(mRgba, new Point(mRgba.width()/2, (mRgba.height()/10)*8), 10, new Scalar(255,0,0));
r = (int) renk[0];
g = (int) renk[1];
b = (int) renk[2];
Imgproc.circle(mRgba, new Point(0, 0), 100, new Scalar(r,g,b), 100);
return mRgba;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
}
【问题讨论】:
-
提供输入图像。您的代码看起来不错,颜色不能来自圆圈的左侧
-
我在两个不同的设备上试过,但结果是一样的。还有什么可能导致这种情况? @小猪
-
提供您正在谈论的图像,而不仅仅是手机的屏幕截图。所以你想告诉我,你在两个不同的设备上用两个不同的相机拍摄的两张不同的照片有相同的颜色?
-
结果和之前一样。它正在其他任何地方挑选颜色。 @小猪
-
好的,再次阅读主题@piglet
标签: java android opencv image-processing colors